我試圖重現這裏的IIEF的例子循環:關閉在JavaScript中
Understand JavaScript Closures With Ease
編輯
這下3.閉包走了歪
這是我的代碼:
var myArray = ["a", "b", "c"];
function doSomething(someArray) {
var counter = 10;
for (var i = 0; i < someArray.length; i++) {
someArray[i] = function(inner_i) {
return function() {
return counter += inner_i;
}();
}(i);
}
return someArray;
}
var newArray = doSomething(myArray);
console.log(newArray[0]);
console.log(newArray[1]);
console.log(newArray[2]);
輸出是
10
11
13
,而不是
10
11
12
我在做什麼不同?
的inner_i是在你的第三環路2,這意味着:'計數器+ = inner_i'等於'11 + 2 = 13'只是'返回計數器+ inner_i' – KRONWALLED
'返回計數器+ inner_i; ' –
*「我做了什麼不同?」*我們怎麼知道?您沒有顯示您要比較代碼的代碼。 –