Назад к вопросам
Junior
71
questionbank
В чем отличие между var и const?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
var объявляется глобально или на уровне функции, может быть переопределена и переназначена. const объявляется блочно, не может быть переназначена, но для объектов и массивов их содержимое может быть изменено.
| Характеристика | var |
const |
|---|---|---|
| Область видимости | Функция или глобальная | Блок ({}) |
| Переназначение | Да | Нет |
| Переопределение | Да | В той же области видимости - нет |
| Инициализация | Необязательна | Обязательна при объявлении |
Поднятие (hoisting) |
Поднимается объявление и инициализация (с undefined) |
Поднимается, но без инициализации (TDZ) |
// var
var x = 10;
console.log(x); // 10
x = 20;
console.log(x); // 20
var x = 30; // Переопределение возможно
console.log(x); // 30
function testVar() {
var y = 5;
console.log(y); // 5
}
testVar();
// console.log(y); // ReferenceError: y is not defined
if (true) {
var z = 100;
}
console.log(z); // 100 (var не имеет блочной области видимости)
// const
const a = 10;
console.log(a); // 10
// a = 20; // TypeError: Assignment to constant variable.
const obj = { name: 'Alice' };
console.log(obj.name); // Alice
obj.name = 'Bob'; // Содержимое объекта const можно изменить
console.log(obj.name); // Bob
// obj = { name: 'Charlie' }; // TypeError: Assignment to constant variable.
if (true) {
const b = 200;
console.log(b); // 200
}
// console.log(b); // ReferenceError: b is not defined (const имеет блочную область видимости)
// Хойстинг
console.log(hoistedVar); // undefined
var hoistedVar = 1;
// console.log(hoistedConst); // ReferenceError: Cannot access 'hoistedConst' before initialization (временная мертвая зона - TDZ)
const hoistedConst = 2;