Что такое hoisting (всплытие) в JavaScript?
Слышал про hoisting/всплытие переменных и функций. Что это значит на практике и почему важно знать?
3 ответа
Hoisting — это поведение JS, при котором объявления как бы «поднимаются» в начало области видимости перед выполнением кода. На практике это объясняет странности:
console.log(x); // undefined, а не ошибка
var x = 5;
var x «всплыл» наверх (но без значения — поэтому undefined). А вот с let/const иначе — они тоже всплывают, но обращение до объявления даёт ошибку (так называемая «временная мёртвая зона»):
console.log(y); // ReferenceError
let y = 5;
Функции, объявленные через function, всплывают целиком — их можно вызвать выше объявления:
hello(); // работает!
function hello() { console.log('hi'); }
Вывод: пиши let/const, объявляй переменные до использования — и hoisting перестанет тебя удивлять.
Это «поднятие» объявлений вверх области видимости. Из-за него var доступен до строки объявления (как undefined), а функции через function — вызываемы выше объявления.
Всплытие объявлений в начало scope.