Здравствуйте. Помогите разобраться с такой проблемой. Есть код:
for(var i = 0; i <= 5; i++){
setTimeout () {function(){
console.log(i)
}, i*1000}
}
1. Почему когда происходит выполнение кода, в консоль записывается 5 шестерок, а тайм-аут срабатывает именно каждую секунду? Тут вопрос не про вывод на консоль шетерок, а именно работа тайм-аута. Каким образом секунда увеличивается постепенно, если логически, после выполнения цикла, вместо i * 1000 должно подставиться 6 * 1000?
Следующий код:
for(var i = 0; i <= 5; i++){
(function(){
var j = i;
setTimeout () {function(){
console.log(j)
}, j*1000}
}())
}
2. Почему при таком варианте, каким-то образом каждая итерация запоминается в переменную j? Я понимаю что это замыкание и тайм-аут видит по замыканию сохраненной значение в переменной j каждый раз. Но вот как это происходит? Вот цикл завершился и записал в j шестерку. А как тайм-аут запомнил, что там были числа 0,1 и т.д.?
Или тут работает отложенный вызов или какой-то стек создается? Тоесть сначало в j присваивается 0 а затем подставляется в тайм-аут функцию и она выполняется и так далее. Но ведь цикл завершается гораздо быстрее чем 1 секунда.
Помогите разобраться.