Этот вопрос проверяет понимание механизма hoisting в JavaScript и его различий для разных типов объявлений.
Hoisting (всплытие) - это механизм в JavaScript, при котором объявления переменных и функций "поднимаются" в начало своей области видимости. Объявления функций поднимаются полностью, а переменные, объявленные через var - только объявление, но не инициализация. let и const также всплывают, но не инициализируются до фактического объявления.
Hoisting влияет на доступность переменных и функций до их фактического объявления в коде.
Поведение для разных типов:
Объявления функций:
// Работает благодаря hoisting
console.log(sayHello()); // "Hello"
function sayHello() {
return "Hello";
}Переменные var:
console.log(x); // undefined (всплыло объявление)
var x = 5;
console.log(x); // 5
// Эквивалентно:
var x;
console.log(x); // undefined
x = 5;
console.log(x); // 5let и const:
console.log(y); // ReferenceError
let y = 10;
// Временная мертвая зона (TDZ)
// от начала блока до объявленияПорядок hoisting:
Объявления функций
Объявления переменных
Присваивания значений
Пример с конфликтами:
var myFunction = 1;
function myFunction() {
return 2;
}
console.log(typeof myFunction); // "number"
// Функция всплыла первой, но потом перезаписана переменнойПрактические последствия:
Всегда объявляйте переменные в начале области видимости
Используйте let и const вместо var
Избегайте переопределения функций переменными