我有这段代码:
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 closure inside loops不同 因为我已经可以这样做了:
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。