for循环中的对象创建

时间:2013-08-29 13:55:23

标签: javascript

我有这段代码:

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。

0 个答案:

没有答案