В чем разница между var, let и const?
Основы языка
`var`, `let` и `const` — три способа объявить переменную, отличающиеся областью видимости, hoisting и возможностью переприсваивания.
Область видимости
- var — функциональная: видна во всей функции, игнорирует блоки
{}. - let / const — блочная: видны только внутри
{}, где объявлены.
Hoisting
- var — поднимается и инициализируется как
undefined. - let / const — поднимаются, но находятся в temporal dead zone (TDZ) до строки объявления — обращение раньше кинет
ReferenceError.
console.log(a); // undefined
var a = 1;
console.log(b); // ReferenceError
let b = 2;Переприсваивание и повторное объявление
- var — можно переприсваивать и повторно объявлять.
- let — можно переприсваивать, нельзя повторно объявлять в том же скоупе.
- const — нельзя переприсваивать ссылку и нужно сразу инициализировать.
const защищает ссылку, но не содержимое объекта:
const user = { name: 'Ann' };
user.name = 'Bob'; // ок — меняем поле
user = {}; // TypeError — меняем ссылкуЧто использовать
По умолчанию const, let — когда значение переприсваивается, var — практически никогда (legacy).
Коротко для собеседования
var — функциональная область и hoisting в undefined; let/const — блочная область и TDZ. const запрещает переприсваивание ссылки. Современный код: const по умолчанию, let при необходимости.