[英]Why does this closure example work incorrect?
我看過閉包的例子,我以為我理解它們,直到我決定這樣做:
var f = [];
for (var i = 0; i < 2; i++) {
f[i] = function foo(a) {
var h = i;
function bar() {
console.log(h);
}
if (a == 1)
bar();
}
}
for (var j = 0; j < 2; j++) {
console.log(f[j](1));
}
輸出是這樣的:
2
2
當我認為它是0, 1
因為我創建了一個外部函數foo
,我將i
存儲在變量h
有人可以解釋這里發生了什么以及為什么那些setTimeout
示例工作正常嗎?
對於所需的輸出更新您的代碼如下
var f = [];
for (var i = 0; i < 2; i++) {
f[i] = (function(i){
return function foo(a) {
var h = i;
function bar() {
console.log(h);
}
if (a == 1)
bar();
}
})(i);
}
for (var j = 0; j < 2; j++) {
console.log(f[j](1));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.