1

我有这段代码:

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。

4

0 回答 0