Что выведет код Senior Event loop обновлено

Инкремент внутри таймера

Вопрос

Что выведет код? По строке на каждый вывод.

for (var i = 0; i < 5;) {
  setTimeout(() => {
    console.log(i++);
  }, 0);
  i++;
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 5, 6, 7, 8, 9. Почему так Инкремент вынесен из заголовка цикла, поэтому легко сбиться.

Что выведет

5
6
7
8
9

Разбор

Почему так

Инкремент вынесен из заголовка цикла, поэтому легко сбиться. Цикл отработает пять итераций, доведя i до 5 и поставив пять таймеров. Все колбэки замкнуты на одну переменную (var), и каждый печатает текущее значение, а затем увеличивает его - получается 5, 6, 7, 8, 9. Классическая ловушка с var, только с дополнительным поворотом.

Вывод

5
6
7
8
9

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме