Что такое поднятие (Hoisting)?
Hoisting — это механизм в JavaScript, при котором объявления переменных и функций перемещаются в верхнюю часть их области видимости во время компиляции, еще до выполнения кода.
Поднятие переменных
Для переменных, объявленных с использованием var, их объявление поднимается в начало области видимости, но их инициализация не поднимается. Это означает, что к переменной можно обратиться до её фактического объявления, но значение будет undefined до тех пор, пока не выполнится инициализация.
console.log(a); // undefined
var a = 10;
В данном случае JavaScript видит это так:
var a;
console.log(a); // undefined
a = 10;
Однако переменные, объявленные с помощью let и const, поднимаются, но остаются в "временной мертвой зоне", пока выполнение не достигнет их инициализации.
console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 20;
Поднятие функций
Функции, объявленные с помощью function declaration, поднимаются полностью (как их объявление, так и тело функции), что позволяет вызывать их до того, как они объявлены в коде.
foo(); // "Hello"
function foo() {
console.log("Hello");
}
JavaScript видит это так:
function foo() {
console.log("Hello");
}
foo(); // "Hello"
Функции, объявленные через function expression
, поднимаются так же, как и переменные, — только объявление поднимается, но не инициализация.
bar(); // TypeError: bar is not a function
var bar = function() {
console.log("Hi");
};
Hoisting — это поведение JavaScript, о котором важно помнить при объявлении переменных и функций. Оно помогает избежать ошибок и правильно понимать, как интерпретатор JavaScript работает с кодом.