var — область видимости функции — доступна в любом месте функцииlet и const — область видимости блока — ограничены блоком {}, в котором они определеныВсе три объявления поднимаются, но ведут себя по-разному:
var поднимается и инициализируется значением undefined, поэтому к ней можно обращаться до объявления без ошибокlet и const поднимаются, но остаются в Temporal Dead Zone (TDZ) до момента достижения объявления — обращение к ним раньше времени вызывает ReferenceErrorvar можно повторно объявить в одной и той же области видимости без ошибокlet и const нельзя повторно объявить в одном блокеvar и let можно переприсваивать после первоначального объявленияconst нельзя переприсвоить — попытка сделать это вызывает TypeErrorconst x = 10;
x = 20; // TypeError: Assignment to constant variable
constВажно понимать, что const предотвращает только переприсвоение самого binding, но не мутацию значения. Свойства объектов и элементы массивов всё ещё можно изменять:
const user = { name: "Alice" };
user.name = "Bob"; // ✅ Allowed
user = {}; // ❌ TypeError
const по умолчаниюlet только когда требуется переприсвоениеvar в современном JavaScript из-за функциональной области видимости и hoisting, которые могут приводить к непредсказуемым ошибкамTemporal Dead Zone (TDZ) — это период, когда переменные let и const поднимаются (hoisted), но недоступны, и попытка доступа к ним выбросит ReferenceError.
Новый — ещё не проверен сообществом
Вы