← Назад к вопросам

Что такое var?

1.0 Junior🔥 241 комментариев
#JavaScript Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI20 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Var — способ объявления переменных в JavaScript

Var — это ключевое слово для объявления переменных, которое было основным в JavaScript до появления let и const в ES6. Это функция-скопированное объявление переменной, которое имеет особую область видимости.

Характеристики var

Область видимости (Hoisting)

Основная особенность var — это function scope (функциональная область видимости), а не block scope. Переменные, объявленные с var, поднимаются (hoisting) в начало функции:

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

Это эквивалентно:

var x;
console.log(x); // undefined
x = 5;
console.log(x); // 5

Block scope проблема

Var игнорирует блочную область видимости:

if (true) {
  var x = 5;
}
console.log(x); // 5 — переменная доступна снаружи блока

for (var i = 0; i < 3; i++) {
  // i будет доступна после цикла
}
console.log(i); // 3

Это часто приводит к ошибкам в асинхронном коде:

for (var i = 0; i < 3; i++) {
  setTimeout(() => {
    console.log(i); // Все выведут 3
  }, 1000);
}

Переопределение (Redeclaration)

Var позволяет переопределить переменную несколько раз в одной области видимости:

var x = 5;
var x = 10; // OK
console.log(x); // 10

Частые ошибки с var

  1. Случайное загрязнение глобального объекта — переменные в глобальной области видимости становятся свойствами window.

  2. Closure проблемы в циклах — все callback функции в цикле ссылаются на одну и ту же переменную i, которая изменяется после каждой итерации.

  3. Временная мёртвая зона — в отличие от let, var не имеет TDZ, что может скрыть ошибки логики.

Почему var считается устаревшим

Современный JavaScript рекомендует использовать:

  • let — для переменных с block scope
  • const — для констант

Var используется только в legacy коде. В современных проектах var считается anti-pattern и должен быть запрещён через ESLint (правило no-var).

Что такое var? | PrepBro