扫码关注官方订阅号
我在函数中定义了一个数组变量,里面存有6个元素,然后在该函数中调用回调函数,在回调函数中无法访问数组变量的值,但是可以访问length属性。感觉很迷惑,不知道该怎么解决。
for(var i=0;i
Book.getBookByISBN()是我在其他模块定义的函数
光阴似箭催人老,日月如移越少年。
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]
前面已经说了原因了,其实就是在你定义Book.getBookByISBN()这个函数里面的回调调用的地方传入bookArr[i]就好了,理解一下形参和实参
这是个典型的异步问题,i的作用域还在其中。因为异步等你 getBookByISBN 方法调用callback的时候 i=bookARR.length。这已经越界了,所以是undefined.
getBookByISBN
i=bookARR.length
undefined
解决方:1.闭包2.let
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
因为
所以
在callback 中带上 bookARR[i]
前面已经说了原因了,其实就是在你定义Book.getBookByISBN()这个函数里面的回调调用的地方传入bookArr[i]就好了,理解一下形参和实参
这是个典型的异步问题,i的作用域还在其中。
因为异步等你
getBookByISBN方法调用callback的时候i=bookARR.length。这已经越界了,所以是undefined.解决方:
1.闭包
2.let