解决异步调用中的范围关闭问题
问题描述:
这是一个非常简化的代码片段来说明问题。解决异步调用中的范围关闭问题
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];
}
正如你可能猜到了,我期待:
不过的了:
所以我的问题是:我怎样才能安全地将i
变量传递给异步函数而不会被原始范围改变?
编辑:
答
img.onload = (function(i) {
return function() {
console.log(i);
}
})(i);
或
img.onload = function(i) {
console.log(i);
}.bind(img, i);