Hoisting — неформальный термин: при создании области видимости движок создаёт привязки до выполнения кода. Исходный текст «вверх» физически не перемещается.
Как ведут себя объявления
console.log(a); // undefinedvar a = 1;
console.log(b); // ReferenceError (TDZ)let b = 2;
foo(); // работаетfunctionfoo() {
console.log("hi");
}
bar(); // TypeError: bar is not a functionvar bar = function () {};
Конструкция
До объявления
var
undefined
let / const
TDZ → ReferenceError
function declaration
полностью инициализирована
function expression (var)
undefined
class
TDZ
На собеседовании
Избегайте фразы «переменные поднимаются наверх». Лучше: «binding создаётся при инициализации scope; инициализация значения — по правилам объявления». Свяжите с TDZ и отличием declaration vs expression.
Что такое hoisting (поднятие) в JavaScript? · Sobeso