Что выведет код 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 ошибок.