作者:拟称2502902853 | 来源:互联网 | 2023-09-25 13:51
我的情况与您在下面看到的类似.在返回第一个异步回调之前,将变量id设置为’03’.有没有办法像在Objective-C中使用块一样对变量进行深度复制或“封闭”?有最佳实践吗?
我的情况与您在下面看到的类似.在返回第一个异步回调之前,将变量id设置为’03’.有没有办法像在Objective-C中使用块一样对变量进行深度复制或“封闭”?有最佳实践吗?
var ids = ['01', '02', '03'];
for(var i=0, i var id = ids[i];
collection.find({id: ids} function () {
console.log(id);
});
}
控制台输出为:
03
03
03
解决方法:
如果使用.forEach()而不是for循环,则可以免费获得闭包:
var ids = ['01', '02', '03'];
ids.forEach(function (id) {
collection.find({id: ids} function () {
console.log(id);
});
});
或者,如果您没有诸如.forEach()的ES5-ism,则可以使用自执行函数来关闭状态.在这里,我们将创建一个与父i分开的内部作用域i:
var ids = ['01', '02', '03'];
for (var i=0; i var id = ids[i];
collection.find({id: ids} function () {
console.log(id);
});
})(i)