这是一个非常简化的代码段来说明问题。
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
变量传递给异步函数而不会被原始范围更改?
编辑:
答案 0 :(得分:1)
img.onload = (function(i) {
return function() {
console.log(i);
}
})(i);
或
img.onload = function(i) {
console.log(i);
}.bind(img, i);