我做了一些研究後放棄了這一點。我的問題如下:Javascript關閉與循環
從post,我瞭解以下代碼。
var funcs = {};
for (var i = 0; i < 3; i++) { // let's create 3 functions
funcs[i] = function() { // and store them in funcs
var item = "item" + i; // inside
console.log("item: " + item + ", i: " + i); // each should log its value.
};
}
for (var j = 0; j < 3; j++) {
funcs[j](); // and now let's run each one to see
}
Result:
item: item3, i: 3
item: item3, i: 3
item: item3, i: 3
但如果我更改移動var item = "item" + i
之外的功能(),結果會有所不同。爲什麼是這樣?
var funcs = {};
for (var i = 0; i < 3; i++) { // let's create 3 functions
var item = "item" + i; // outside
funcs[i] = function() { // and store them in funcs
console.log("item: " + item + ", i: " + i); // each should log its value.
};
}
for (var j = 0; j < 3; j++) {
funcs[j](); // and now let's run each one to see
}
Result:
item: item2, i: 3
item: item2, i: 3
item: item2, i: 3
真正的問題是你的聲明和'i'變量的用法。它保持在最高級別的範圍內,但是您可以在關閉中使用它。當你「關閉」,現在讓我們跑......「。那麼'i'變量(用於for(;;)將會完成它的循環並且顯示值 – 2014-11-01 09:38:44