В типичном цикле var все callbacks читают одну переменную после завершения цикла; let создаёт отдельную привязку каждой итерации.
Что выведет в консоль код с циклом for на var и setTimeout? Что изменится, если заменить var на let или const?
В типичном цикле 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++, после постановки первого таймера. Это иллюстрация: точный результат другого цикла зависит от его кода.