Загрузка...
Загрузка...
В JavaScript существует три ключевых слова для объявления переменных: var, let и const. Они отличаются друг от друга областью видимости, возможностью переопределения значений и механизмом всплытия (hoisting).
var, доступны во всей функции, даже если объявлены внутри блока.var всплывают (hoisted) — их объявление поднимается наверх функции, но инициализация остаётся на месте.function example() {
console.log(a); // undefined, переменная всплыла, но значение ещё не присвоено
var a = 10;
if (true) {
var a = 20; // переопределение переменной в той же функции
console.log(a); // 20
}
console.log(a); // 20
}
example();
Область видимости: Блочная область (block-scoped). Переменные, объявленные с помощью let, доступны только внутри блока, где они объявлены (например, в фигурных скобках {}).
Hoisting: let также всплывает, но находится в «временной мёртвой зоне» (Temporal Dead Zone) до момента инициализации.
Переопределение: Нельзя повторно объявлять переменную с таким же именем в одной и той же области видимости.
function example() {
// console.log(b); // Ошибка: нельзя получить доступ до инициализации (ReferenceError)
let b = 10;
if (true) {
let b = 20; // новая переменная, локальная для блока if
console.log(b); // 20
}
console.log(b); // 10
}
example();
function example() {
const c = 10;
// c = 20; // Ошибка: Assignment to constant variable.
if (true) {
const c = 30; // новая переменная в локальной области видимости
console.log(c); // 30
}
console.log(c); // 10
const obj = { name: "Alice" };
obj.name = "Bob"; // Допустимо: меняется свойство объекта
console.log(obj.name); // "Bob"
// obj = {}; // Ошибка: нельзя переназначить переменную
}
example();
| Характеристика | var | let | const |
|---|---|---|---|
| Область видимости | Функциональная | Блочная | Блочная |
| Hoisting | Всплывает с undefined | Временная мёртвая зона до инициализации | Временная мёртвая зона до инициализации |
| Повторное объявление | Разрешено | Запрещено в той же области видимости | Запрещено в той же области видимости |
| Изменение значения | Разрешено | Разрешено | Запрещено переназначение (но возможна мутация объектов) |