Вопрос проверяет понимание TDZ (temporal dead zone) и отличий let/const от var.
let и const поднимаются (hoisting есть), но не инициализируются сразу. До строки объявления переменная находится в TDZ, и любое обращение к ней приводит к ReferenceError. Это сделано намеренно, чтобы избежать скрытых багов, когда код читает переменную до ее логического объявления. В отличие от var, где до объявления возвращается undefined, let/const сразу сигнализируют об ошибке.
TDZ (temporal dead zone) — это промежуток времени от начала области видимости до строки инициализации переменной let или const, в котором переменная существует, но недоступна.
Движок видит объявление let/const и резервирует имя в области видимости
До строки объявления переменная находится в TDZ
Любая попытка:
прочитать значение
использовать в выражении
приводит к ReferenceError
let'use strict';
console.log(a); // ReferenceError
let a = 10;
var'use strict';
console.log(b); // undefined
var b = 10;
Чтобы ошибки были явными, а не замаскированными
Чтобы код читался сверху вниз без “магии”
Чтобы уменьшить количество багов в сложных блоках и циклах
constconst тоже имеет TDZ
Требует инициализацию сразу
'use strict';
const x; // SyntaxError
ReferenceError при let/const — это защитный механизм. Он заставляет писать код, где переменные используются только после явного объявления, делая поведение предсказуемым.