Sobes.tech
Назад к вопросам
Middle
2

Если объявить функцию, а после неё переменную — будет ли к ней доступ внутри функции? Расскажи про всплытие переменных и временную мёртвую зону.

Компании, где спрашивали
Data World

Ответ от нейросети

sobes.tech AI

В JavaScript переменные, объявленные с помощью var, всплывают (hoisting) — их объявления поднимаются вверх функции или глобального контекста, но инициализация остаётся на месте. Переменные, объявленные через let и const, тоже всплывают, но находятся во временной мёртвой зоне (TDZ) с начала блока до места объявления, и к ним нельзя обратиться до объявления.

Если объявить функцию, а после неё переменную с let или const, то внутри функции к этой переменной доступа не будет до её объявления — попытка обращения вызовет ReferenceError из-за TDZ.

Пример:

function test() {
  console.log(a); // ReferenceError: Cannot access 'a' before initialization
  let a = 10;
}

test();

Если же переменная объявлена с var, то внутри функции она будет доступна, но со значением undefined до инициализации:

function test() {
  console.log(a); // undefined
  var a = 10;
}

test();

Таким образом, всплытие — это поднятие объявлений переменных и функций вверх их области видимости, но для let и const действует TDZ, которая запрещает доступ до объявления.