Практические последствия (var)
var устарел, потому что его поведение непредсказуемо и ведёт к ошибкам, которые сложно отловить.
Почему var не рекомендуется
-
Нет блочной области видимости
Переменныеvarвидны во всей функции, даже если объявлены внутриifилиfor:function test() { if (true) { var x = 10; } console.log(x); // 10 — не ошибка, хотя x объявлена внутри if }Это нарушает ожидания: переменная должна быть локальной для блока, но
varделает её функциональной. -
Поднятие (hoisting) без инициализации
varподнимается в начало функции, но инициализируется значениемundefined:console.log(y); // undefined — не ошибка! var y = 5;Это может скрыть ошибки: вы используете переменную до её объявления — и ничего не падает.
-
Можно переобъявить
varпозволяет объявить одну и ту же переменную несколько раз — без ошибки:var name = "Анна"; var name = "Иван"; // перезапись — без предупреждения console.log(name); // "Иван"Это легко приводит к случайной потере данных.
Что использовать вместо var
-
let— для переменных, которые меняются.
Блочная область видимости. Нельзя переобъявить в одной области.let count = 0; count = 1; // ок let count = 2; // ошибка: Identifier 'count' has already been declared -
const— для констант и значений, которые не должны меняться.
Обязательно инициализировать при объявлении.
Не позволяет переприсвоить, но позволяет менять свойства объектов и элементы массивов.const user = { id: 1 }; user.id = 2; // ок — меняем свойство user = { id: 3 }; // ошибка — нельзя переприсвоить
Рекомендации
- Всегда используйте
letиconst— они предсказуемы, безопасны и соответствуют современным стандартам. - Избегайте глобальных переменных — они конфликтуют между файлами, усложняют отладку и ломают модульность.
- Объявляйте переменные как можно глубже — в том блоке, где они реально нужны.
- Используйте
constпо умолчанию — если значение не меняется.
Только если нужно переприсвоить — используйтеlet.
Современные инструменты (ESLint, TypeScript, Babel) и стандарты (Airbnb, Google) запрещают
varв новом коде.
Использованиеletиconst— не вопрос стиля, а вопрос надёжности.