我有这段代码:
var items = [0,1];
for (var i = 0; i < 2; i++) {
var obj = new function() {
this.item = items[i];
}
window.setTimeout(function() { console.log(obj.item); }, 1000);
}
结果是:
1
1
但我本来预计会这样:
0
1
我有点疑惑。获得此结果的最佳方法是什么?
我认为这个问题实际上与循环内的 Javascript 闭包不同, 因为我已经可以做到这一点:
var items = [0,1];
var objs = [];
for (var i = 0; i < 2; i++) {
var obj = new function() {
this.item = items[i];
}
objs.push(obj);
window.setTimeout(function() { console.log(obj.item); }, 1000);
}
for (var i = 0; i < 2; i++)
console.log(objs[i].item);
第二个循环的结果将是:
0
1
问题是从 setTimeout 调用正确的 obj。