Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: hoisting, var, let

Как hoisting работает для var, let и const

Вопрос проверяет понимание поднятия объявлений (hoisting), областей видимости и причины TDZ для let/const.

Короткий ответ

Hoisting — это когда объявления “обрабатываются” до выполнения кода. У var объявление поднимается и переменная сразу инициализируется как undefined, поэтому к ней можно обратиться до строки объявления (получишь undefined). У let и const тоже есть поднятие объявления, но до фактической инициализации переменная находится в TDZ (temporal dead zone), и доступ к ней до объявления вызывает ReferenceError. const дополнительно требует инициализацию сразу при объявлении.

Длинный ответ

Определение

Hoisting — это поведение движка, при котором объявления (declaration) учитываются до выполнения кода. Важно: “поднимается” не значение, а факт объявления.

var: поднятие + инициализация undefined

  1. var имеет функциональную область видимости (function scope)

  2. при входе в функцию переменная существует и равна undefined

Пример:

'use strict';

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

Это эквивалентно по смыслу:

'use strict';

var x;           // объявление поднялось
console.log(x);  // undefined
x = 10;          // присваивание осталось на месте
console.log(x);

let и const: поднятие объявления + TDZ

  1. let/const имеют блочную область видимости (block scope)

  2. переменная существует “в блоке”, но недоступна до строки объявления

  3. попытка чтения до объявления → ReferenceError

Пример:

'use strict';

console.log(a); // ReferenceError
let a = 10;

const дополнительно

  1. const нельзя объявить без значения

  2. запрещено переназначение (но объект внутри может быть мутабельным)

Пример:

'use strict';

const n = 1;
// n = 2; // TypeError: Assignment to constant variable

Почему это важно в реальном коде

  1. var может “маскировать” ошибки, возвращая undefined там, где ожидалась переменная

  2. let/const дают более безопасное поведение: ошибка видна сразу

  3. в циклах и блоках let часто предотвращает баги со “всплывающими” значениями

Вывод

var поднимается и инициализируется undefined, поэтому доступ “до объявления” возможен. let/const тоже поднимаются, но до инициализации находятся в TDZ, поэтому доступ до объявления приводит к ReferenceError — это делает код безопаснее.

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#hoisting

#var

#let

Подпишись на React Developer в телеграм