Sobes.tech
Middle

Bir fonksiyon tanımlayıp ardından bir değişken tanımlarsanız, fonksiyon içinde erişilebilir olur mu? Değişkenlerin yukarı kaldırılması (hoisting) ve geçici ölüm bölgesi hakkında bilgi ver.

sobes.tech yapay zeka

AI'dan gelen yanıt

В 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, которая запрещает доступ до объявления.