Где доступна переменная, объявленная через let?
Основы языка
Переменная, объявленная через `let`, доступна только внутри блока `{}`, где она объявлена (блочная область видимости), начиная со строки объявления.
Блочная область
let видна в пределах ближайших фигурных скобок — функции, цикла, if, просто блока:
{
let x = 1;
console.log(x); // 1
}
console.log(x); // ReferenceError — x не видна снаружи
if (true) {
let y = 2;
}
console.log(y); // ReferenceErrorВ циклах
let создаёт новую переменную на каждой итерации:
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i)); // 0, 1, 2
}Temporal Dead Zone
До строки объявления переменная существует, но недоступна — обращение кинет ReferenceError:
console.log(a); // ReferenceError (TDZ)
let a = 5;let против var
let— блочная область, TDZ.var— функциональная область, hoisting вundefined.
Коротко для собеседования
let видна только внутри блока {}, где объявлена (блочная область), и только после строки объявления (до неё — TDZ). В циклах создаёт новую переменную на итерацию. Отличается от var (функциональная область).