Блочная область видимости
Блочная область видимости — это когда переменная доступна только внутри блока кода, заключённого в фигурные скобки {} — например, внутри if, for, while, или любого другого блока.
Переменные, объявленные с let и const, привязаны к блоку, а не к функции. Они не видны за пределами этого блока.
Пример:
if (true) {
let isActive = true;
const theme = "dark";
}
console.log(isActive); // ошибка: isActive is not defined
console.log(theme); // ошибка: theme is not defined
Здесь isActive и theme существуют только внутри if. Как только блок завершён — переменные уничтожаются (в смысле недоступны).
То же работает с циклами:
for (let i = 0; i < 3; i++) {
console.log(i); // 0, 1, 2
}
console.log(i); // ошибка: i is not defined
В отличие от var, здесь i не выходит за пределы цикла — это предсказуемо и безопасно.
Особенность: let в цикле for
С let в цикле for каждая итерация создаёт новую переменную. Это важно при использовании замыканий.
Пример с var — проблема:
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 100);
}
// Выведет: 3, 3, 3 — потому что i — одна переменная, и к моменту запуска setTimeout она = 3
Пример с let — правильно:
for (let i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 100);
}
// Выведет: 0, 1, 2 — каждая итерация имеет свою i
Почему так происходит:
let создаёт новую привязку переменной для каждой итерации цикла. var — одну и ту же переменную для всего цикла.
Всегда используйте
letиconstвместоvar.
Они дают точный контроль: переменная существует только там, где вы её объявили — меньше ошибок, проще читать и отлаживать код.