Как блочные переменные и общая ссылка меняют вывод?

Внутри блока выводятся 3, 4, после блока — 3, 2, 4. Var не создаёт отдельную привязку для блока, let создаёт, а alias указывает на тот же объект box.

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

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

Внутри блока выводятся 3, 4, после блока — 3, 2, 4. Var не создаёт отдельную привязку для блока, let создаёт, а alias указывает на тот же объект box.

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

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

Условие

Определите результат:

var x = 1;
let y = 2;
const box = {n: 0};
{
  var x = 3;
  let y = 4;
  const alias = box;
  alias.n = y;
  console.log(x, y);
}
console.log(x, y, box.n);

Ответ

Внутри блока выводятся 3, 4, после блока — 3, 2, 4. Var не создаёт отдельную привязку для блока, let создаёт, а alias указывает на тот же объект box.

Внутренняя y скрывает внешнюю только до конца блока; её значение 4 успевает записаться в общий объект. Объявление const запрещает переназначение ссылки box, но не изменение её свойств. Не следует смешивать область видимости имени и время жизни объекта: объект сохраняется после выхода внутренней alias из области видимости.

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

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

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

Подробнее