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

var в цикле с setTimeout

Вопрос

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

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

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

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

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

Коротко

Код выведет: 3, 3, 3. Почему так var имеет функциональную область видимости: все три колбэка замкнулись на одну переменную, к моменту их выполнения она равна 3.

Что выведет

3
3
3

Разбор

Почему так

var имеет функциональную область видимости: все три колбэка замкнулись на одну переменную, к моменту их выполнения она равна 3. С let на каждой итерации создаётся своя привязка - будет 0 1 2.

Вывод

3
3
3

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

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

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