Что такое var, let, const? Чем они отличаются? Что такое всплытие (hoisting)?
Ответ от нейросети
sobes.tech AI
В JavaScript var, let и const — это ключевые слова для объявления переменных, но они отличаются по области видимости, возможности переназначения и всплытию.
-
var— объявляет переменную с функциональной или глобальной областью видимости. Переменные, объявленные черезvar, подвержены всплытию (hoisting), то есть их объявление поднимается вверх функции, но инициализация остаётся на месте. Можно переопределять и переназначать. -
let— объявляет переменную с блочной областью видимости (внутри{}). Не подвержена всплытию в классическом смысле — доступ к переменной до объявления вызовет ошибку (temporal dead zone). Можно переназначать, но нельзя переобъявлять в одной области. -
const— тоже блочная область видимости, но переменная должна быть инициализирована при объявлении и не может быть переназначена. Однако, если это объект или массив, содержимое можно изменять.
Всплытие (hoisting) — это механизм, при котором объявления переменных и функций поднимаются вверх своей области видимости во время компиляции. Для var это означает, что переменная существует с начала функции, но инициализируется в месте объявления. Для let и const объявление тоже поднимается, но доступ к ним до объявления запрещён (temporal dead zone).
Пример:
console.log(a); // undefined (var всплыла)
var a = 5;
console.log(b); // ReferenceError (temporal dead zone)
let b = 10;
const c = 15;
c = 20; // TypeError: Assignment to constant variable.