国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

javascript - 回調函數如何訪問當前函數作用下的值

瀏覽:136日期:2023-09-19 09:39:21

問題描述

我在函數中定義了一個數組變量,里面存有6個元素,然后在該函數中調用回調函數,在回調函數中無法訪問數組變量的值,但是可以訪問length屬性。感覺很迷惑,不知道該怎么解決。

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

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

問題解答

回答1:因為

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);}回答2:

在callback 中帶上 bookARR[i]

回答3:

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

回答4:

這是個典型的異步問題,i的作用域還在其中。因為異步等你 getBookByISBN 方法調用callback的時候 i=bookARR.length。這已經越界了,所以是undefined.

解決方:1.閉包2.let

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 久草视频观看 | 二区在线观看 | 日韩欧美一区二区在线观看 | 成人久久久观看免费毛片 | 大美女香蕉丽人视频网站 | 亚洲狠狠ady亚洲精品大秀 | 国产一级在线观看 | 男女男在线精品网站免费观看 | 怡红院视频网 | 成年女人永久免费观看片 | 日韩欧美在线视频一区二区 | 免费国产成人高清在线看软件 | 欧美一级一极性活片免费观看 | 日产一区两区三区四区 | 99视频在线国产 | 久久久亚洲欧美综合 | 自拍偷在线精品自拍偷无码专区 | 加勒比一本大道香蕉在线视频 | 九九51精品国产免费看 | 中文字幕在线视频在线看 | 国产精品一区伦免视频播放 | 国产亚洲精品免费 | 日本精品在线观看 | 成人毛片在线视频 | 中文字幕在线播 | 国产精品黄在线观看免费软件 | 日韩精品一区二区三区中文在线 | 狠狠色噜噜狠狠狠米奇9999 | 暖暖在线精品日本中文 | 亚洲精品综合一二三区在线 | 成人一级视频 | 中文国产成人精品久久一 | 国产成人久久777777 | 香蕉久久国产 | 男人躁女人躁的好爽免费视频 | 99在线视频网站 | 午夜一区二区福利视频在线 | 日本阿v视频在线观看高清 日本波多野结衣视频 | 国产精品久久不卡日韩美女 | 亚洲精品一区二区久久这里 | 天天澡夜夜澡狠狠澡 |