Что такое var?
Основы языка
`var` — устаревший способ объявления переменной с функциональной областью видимости и hoisting. В современном коде его заменяют let и const.
Свойства var
- Функциональная область — переменная видна во всей функции, игнорирует блоки
{}. - Hoisting в `undefined` — поднимается и инициализируется как
undefinedдо строки объявления. - Можно переобъявлять в том же скоупе без ошибки.
- Привязывается к глобальному объекту при объявлении в глобальной области.
console.log(x); // undefined (не ошибка)
var x = 5;
if (true) {
var y = 10;
}
console.log(y); // 10 — var игнорирует блокПроблемы var
Утечка из блока
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i)); // 3, 3, 3 — одна переменная
}С let было бы 0, 1, 2.
Неожиданный hoisting
Обращение до объявления даёт undefined вместо ошибки, что скрывает баги.
var против let/const
- Область:
var— функциональная,let/const— блочная. - Hoisting:
var—undefined,let/const— TDZ (ошибка).
Коротко для собеседования
var — функциональная область, hoisting в undefined, переобъявление разрешено. Порождает утечки из блоков и баги от раннего доступа. В современном коде используют let/const (блочная область, TDZ).