Здравствуйте, не совсем понял, почему выводиться цифра 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
.
С уважением,
Валерий Алигорский.
Понял, спасибо!