PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

Что такое Hoisting?

Основы языка

Hoisting (поднятие) — это поведение движка JavaScript, при котором объявления переменных и функций логически «поднимаются» в начало своей области видимости до выполнения кода.

Что именно поднимается

  • Function Declaration — поднимается целиком (тело тоже), можно вызвать раньше объявления.
  • var — поднимается объявление, но не значение; до присваивания равна undefined.
  • let / const — поднимаются, но попадают в temporal dead zone (TDZ) — обращение до объявления кинет ReferenceError.
declared();          // работает
function declared() {}

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

console.log(l);      // ReferenceError (TDZ)
let l = 5;

Как это работает

Движок в фазе компиляции регистрирует объявления в лексическом окружении, а инициализация происходит в фазе выполнения. Поэтому имя «известно», но значение может быть ещё не присвоено.

Function Expression не всплывает как функция

expressed(); // TypeError: expressed is not a function
var expressed = function () {};

Всплыла только переменная var expressed (= undefined).

Коротко для собеседования

Hoisting — объявления поднимаются в начало scope. Function Declaration доступна целиком до объявления; var — как undefined; let/const — в TDZ (ошибка при раннем доступе). Помогает избегать «магии» и понимать ReferenceError.

Другие вопросы раздела