Практические последствия (var)

var устарел, потому что его поведение непредсказуемо и ведёт к ошибкам, которые сложно отловить.

Почему var не рекомендуется

  1. Нет блочной области видимости
    Переменные var видны во всей функции, даже если объявлены внутри if или for:

    function test() {
      if (true) {
        var x = 10;
      }
      console.log(x); // 10 — не ошибка, хотя x объявлена внутри if
    }
    

    Это нарушает ожидания: переменная должна быть локальной для блока, но var делает её функциональной.

  2. Поднятие (hoisting) без инициализации
    var поднимается в начало функции, но инициализируется значением undefined:

    console.log(y); // undefined — не ошибка!
    var y = 5;
    

    Это может скрыть ошибки: вы используете переменную до её объявления — и ничего не падает.

  3. Можно переобъявить
    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 — не вопрос стиля, а вопрос надёжности.