2
Я видел примеры закрытия, и я думал, что я их понимаю, пока я не решил сделать это:Почему этот пример закрытия работает некорректно?
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
примеры работают исправно?
Вы не 'setTimeout' звонки? [Этот вопрос] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) сильно связан, возможно, с дубликатом. –
Вы только присваиваете 'i'' 'h, когда функция фактически вызывается. В то время 'i' уже 2. – Yoshi
@Yoshi Хорошо, теперь я понял. Было легко на самом деле. Спасибо! –