Что выведет в консоль код с циклом for на var и setTimeout? Что изменится, если заменить var на let или const?

В типичном цикле var все callbacks читают одну переменную после завершения цикла; let создаёт отдельную привязку каждой итерации.

Короткий ответ

Что ответить на собеседовании

В типичном цикле var все callbacks читают одну переменную после завершения цикла; let создаёт отдельную привязку каждой итерации.

Подробный разбор

Ответ с пояснениями

Условие

Что выведет в консоль код с циклом for на var и setTimeout? Что изменится, если заменить var на let или const?

Ответ

В типичном цикле var все callbacks читают одну переменную после завершения цикла; let создаёт отдельную привязку каждой итерации.

Например, for (var i=0;i<3;i++) setTimeout(()=>console.log(i),0) выведет 3 три раза, а с let — 0,1,2. Механическая замена на const в таком цикле даст ошибку на i++, после постановки первого таймера. Это иллюстрация: точный результат другого цикла зависит от его кода.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее