这是一个非常简化的代码段,用于说明问题。
var srcs = ["url1", "url2", "url3"];
for (var i = 0; i < srcs.length; i++) {
var img = document.createElement("img");
var tryBrokeClosure = i;
img.onload = function() {
console.log(tryBrokeClosure);
};
img.src = srcs[i];
}
您可能猜到了,我期待的是:
0
1
2
但是得到了:
2
2
2
所以我的问题是:如何安全地将i
变量传递给异步函数而不被原始范围更改?
编辑:
img.onload = (function(i) {
return function() {
console.log(i);
}
})(i);
或者
img.onload = function(i) {
console.log(i);
}.bind(img, i);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句