О выполнении функций непосредственно в JavaScript закрытия
var funcs=[];
for(var i=0;i<3;i++){
funcs[i]=function(){
console.log(i);
};
}
for(var j=0;j<3;j++){
funcs[j]();
}
Таким образом, я знаю, что это будет оповещать 3 all.Because функции были названы после того, как я был назначен 3.
Но в ниже кода, я не могу понять, почему это происходит.
for(var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i);
}, 2000);
}
на мой взгляд, когда я был назначен на 0, первая функция SetTimeout будет выполняться до того я был назначен 1.
Я прав в порядке этого цикл?
Возможный дубликат [JavaScript закрытия внутри петли - простой практический пример] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical- пример) – cartant
Вы получаете 3x3 по той же причине. * «первая функция setTimeout будет выполнена до того, как мне будет присвоено значение 1.» * Нет, все функции выполняются после того, как цикл завершен, и в какой точке 'i' имеет значение' 3'. Цикл не ждет таймаута. И это на самом деле очевидно из того факта, что вы получаете результат всех трех функций в * один раз * 2 секунды в будущем. Между каждым выходом не существует 2-секундной задержки. –
Что значит «3x3»? И почему «все функции выполняются после завершения цикла»? – zyMacro