国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

javascript - 回呼函數(shù)如何存取目前函數(shù)作用下的值
大家講道理
大家講道理 2017-05-16 13:35:48
0
4
681

我在函數(shù)中定義了一個數(shù)組變量,裡面存有6個元素,然後在該函數(shù)中調(diào)用回調(diào)函數(shù),在回調(diào)函數(shù)中無法訪問數(shù)組變量的值,但是可以訪問length屬性。感覺很迷惑,不知道該怎麼解決。

for(var i=0;i<bookARR.length;i++){//在該書中寫入 有借圖書館id
                //因為圖書館表需要所有書籍的_id,所以檢測有時,記錄id
                console.log("在外面"+bookARR[i]);//9787539989891 9787533946777 9787569914078 9787513316286 9787218113180 9787535491978
                 Book.getBookByISBN(bookARR[i],function(err,book){
                    if(!book||err){
                        console.log("huidiao"+bookARR.length);//6
                        console.log("在里面"+bookARR[i]);//undefined undefined undefined undefined undefined undefined
                        newBook.push(bookARR[i]);
                    }else{
                        newBook_id.push(book._id);
                    }
                    ep.emit('examine');
                })
            }

Book.getBookByISBN()是我在其他模組定義的函數(shù)

大家講道理
大家講道理

光陰似箭催人老,日月如移越少年。

全部回覆(4)
伊謝爾倫

因為

for (var i = 0; i<10; i++) {
   setTimeout(function(){console.log(i)});
}

for (var i = 0; i<10; i++) {
    (function(i){
       setTimeout(function(){console.log(i)});
    })(i)
}

所以

for(var i=0;i<bookARR.length;i++){
    (function(i) {
        Book.getBookByISBN(bookARR[i],function(err,book){
            if(!book||err){
                console.log("huidiao"+bookARR.length)
                console.log("在里面"+bookARR[i]);
                newBook.push(bookARR[i]);
            }else{
                newBook_id.push(book._id);
            }
            ep.emit('examine');
        })
    })(i);
}
巴扎黑

在callback 中帶上 bookARR[i]

左手右手慢動作

前面已經(jīng)說了原因了,其實就是在你定義Book.getBookByISBN()這個函數(shù)裡面的回調(diào)調(diào)用的地方傳入bookArr[i]就好了,理解一下形參和實參

漂亮男人

這是典型的非同步問題,i的作用域還在其中。
因為非同步等你 getBookByISBN 方法調(diào)用callback的時候 i=bookARR.length。這已經(jīng)越界了,所以是undefined.

解決方:
1.閉包
2.let

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板