DevGang
Авторизоваться

Что такое «поднятие» в JavaScript на примере?

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

Переменное поднятие

Для переменных, объявленных с помощью var, поднимается объявление, но не инициализация.

console.log(a); // Output: undefined
var a = 5;
console.log(a); // Output: 5

В приведенном выше примере переменная a поднимается наверх своей области видимости, поэтому первый console.log(a) не выдает ошибку, а возвращает undefined, поскольку инициализация (a = 5) не поднимается.

Функция поднятия

Объявления функций полностью поднимаются, то есть и объявление, и тело функции перемещаются в верхнюю часть области действия.

hoistedFunction(); // Output: "This function is hoisted!"

function hoistedFunction() {
    console.log("This function is hoisted!");
}

В этом случае функцию hoistedFunction можно вызвать до ее фактического объявления в коде.

Let и Const

Переменные, объявленные с помощью let и const, также поднимаются, но не инициализируются. Они остаются во "временной мертвой зоне" с начала блока до тех пор, пока не встретится объявление.

console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 10;
console.log(b); // Output: 10

console.log(c); // ReferenceError: Cannot access 'c' before initialization
const c = 20;
console.log(c); // Output: 20

В приведенном выше примере обращение к b или c до их объявления приведет к возникновению ReferenceError, поскольку они находятся во временной мертвой зоне.

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

hoisted(); // "Function hoisted!"
function hoisted() {
    console.log("Function hoisted!");
}

console.log(y); // ReferenceError: Cannot access 'y' before initialization
let y = 20;

console.log(z); // ReferenceError: Cannot access 'z' before initialization
const z = 30;

Заключение

Переменные, объявленные с помощью var, поднимаются, но инициализируются до undefined. Объявления функций полностью поднимаются. Переменные, объявленные с помощью let и const, поднимаются, но не инициализируются, что приводит к временной мертвой зоне.


Источник

#JavaScript #Начинающим
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу