В JavaScript есть три способа объявления переменных:
var
let
const
Основные различия между ними касаются области видимости, возможности переопределения и всплытия (hoisting).
Характеристика | var | let | const |
---|---|---|---|
Область видимости | Функциональная | Блочная | Блочная |
Переопределение | Да | Да | Нет |
Повторное объявление | Да | Нет | Нет |
Всплытие (hoisting) | Да (без инициализации) | Да (но в TDZ) | Да (но в TDZ) |
Инициализация | Можно позже | Можно позже | Обязательно сразу |
Temporal Dead Zone — это период между созданием переменной и её инициализацией, когда доступ к переменной вызывает ошибку.
console.log(a); // ReferenceError
let a = 10;
var
— устаревший способ, но всё ещё работаетfunction testVar() {
if (true) {
var message = "Привет из if";
}
console.log(message); // работает! → "Привет из if"
}
let
— предпочтительный способ для изменяемых переменныхfunction testLet() {
if (true) {
let message = "Привет из if";
console.log(message); // "Привет из if"
}
// console.log(message); // ReferenceError
}
const
— когда переменная не должна изменятьсяconst PI = 3.14;
PI = 3.1415; // TypeError: Assignment to constant variable.
Важно: const
запрещает менять саму ссылку, но не объект, на который она указывает:
const user = { name: "Alex" };
user.name = "Ivan"; // Это работает!
const
по умолчанию.let
, если значение будет изменяться.var
, если только не работаешь с очень старым кодом.function test() {
console.log(a);
var a = 5;
}
test();
{
console.log(b);
let b = 10;
}
let x = 10;
{
let x = 20;
console.log(x);
}
console.log(x);
console.log(typeof undeclaredVar);
console.log(undeclaredVar);
var undeclaredVar = 42;
if (true) {
const a = 5;
}
console.log(a);
let name = "Aleksandr";
let name = "Evgeniya";
Вопрос про var
, let
, const
— это классика собеседований.
Важно не просто запомнить, а понимать разницу: в области видимости, переопределении и всплытии.
В реальной разработке выбирайте const
и let
, избегайте var
.
Хочешь больше статей по подготовке к собеседованию? Подпишись на EasyAdvice(@AleksandrEmolov_EasyAdvice), добавляй сайт в избранное и прокачивай себя каждый день 💪