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

Какие переменные всплывают?

Основы языка

Всплывают (hoisting) объявления переменных `var` и функций (Function Declaration); `let`/`const` тоже «поднимаются», но попадают в temporal dead zone и недоступны до объявления.

Что всплывает и как

var — всплывает как undefined

Объявление поднимается, значение — нет:

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

Function Declaration — всплывает целиком

Можно вызвать до объявления:

greet(); // работает
function greet() {}

let / const — в TDZ

Поднимаются, но обращение до строки объявления кинет ReferenceError:

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

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

Всплывает только переменная (по правилам var/let):

fn(); // TypeError
var fn = function () {};

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

В фазе компиляции движок регистрирует объявления в лексическом окружении. var инициализируется undefined, let/const — остаются неинициализированными (TDZ), функции-декларации — с телом.

Практический вывод

  • Полагаться на hoisting не стоит.
  • let/const безопаснее: TDZ ловит ранний доступ.

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

Всплывают var (как undefined) и Function Declaration (целиком, вызываемы до объявления). let/const поднимаются, но в TDZ — доступ до объявления даёт ReferenceError. Function Expression/стрелка всплывают только как переменная. Полагаться на hoisting не рекомендуется.

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