// 1

Если это один обычный браузерный script, сначала выводятся 3 и 10, затем возникает ReferenceError на k; позже три таймера выводят по 3.

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

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

Если это один обычный браузерный script, сначала выводятся 3 и 10, затем возникает ReferenceError на k; позже три таймера выводят по 3.

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

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

Условие

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

// 2 console.log(i) var j = 10 console.log(j)

// 3 console.log(k) const k = 10 console.log(k)

// 4 var a = 2 var b = a b++ console.log(a) console.log(b)

// 5 var c = [1, 2, 3] var d = c d.push(4) console.log(c)

Ответ

Если это один обычный браузерный script, сначала выводятся 3 и 10, затем возникает ReferenceError на k; позже три таймера выводят по 3.

var i общий для всех callback и после цикла равен 3. Доступ к const k до инициализации попадает в temporal dead zone, поэтому оставшаяся синхронная часть этого script не выполняется; ошибка не отменяет уже поставленные браузерные таймеры. Если блоки запускать отдельно, блок 2 без внешнего i сам упадёт на первом чтении. Отдельный блок 4 выводит 2 и 3, блок 5 — массив [1, 2, 3, 4], поскольку c и d ссылаются на один объект. В среде, завершающей процесс при необработанной ошибке, таймеры могут не выполниться.

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

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

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

Подробнее