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);

2 番目のループの結果は次のようになります。

0
1

問題は、setTimeout から正しい obj を呼び出すことです。

4

0 に答える 0