私はこのコードを持っています:
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 を呼び出すことです。