Здравствуйте, не совсем понял, почему выводиться цифра 3 в этом коде:
for (var i = 0; i < 3; i++)
setTimeout(function() {
console.log(i);
}, 0);Ведь переменная i должна увеличиться только до 2. Почему так происходит?
Здравствуйте, Денис Викторович.
Хочу обратить Ваше внимание, что код JavaScript выполняется в одном потоке (как это и написано в курсе).
Как Вы думаете почему прекращается выполнение цикла?
Потому что условие i < 3 становится ложным, а первое число i, которое будет удовлетворять данному условию — 3: 3 < 3? — нет.
Что делает функция setTimeout?
setTimeoutДанная функция запускает выполение функции, которое произойдёт спустя время, указанное в параметре delay. Если там стоит число 0, то она будет запущено с задержкой 0, но после всех операций, которые выполняется сейчас.
Что фактически происходит?
Фактически сначала выполняется полностью цикл for, ставя в очередь 3 функции setTimeout, которые должны вывести число i. К концу выполнения цикла for i будет равно 3, после этого и будет выполяться каждая из функций, переданная в setTimeout. Соответственно данный код 3 раза выведет число 3.
С уважением,
Валерий Алигорский.
Понял, спасибо!