PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

Где доступна переменная, объявленная через 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 (функциональная область).

Другие вопросы раздела