Внутри блока выводятся 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 из области видимости.