Как это устроено
Пишите так, чтобы код не зависел от «поднятия»: const по умолчанию, let при переприсваивании, не читайте переменную до инициализации.
Подробности
- Предпочитайте
const/let вместо var.
- Объявляйте ближе к месту первого использования.
- Не вызывайте function expression до присваивания; declaration безопаснее, но явный порядок всё равно читаемее.
- Линтеры:
no-use-before-define, no-undef.
let и const тоже «поднимаются» (привязка существует с начала блока), но до строки объявления они в TDZ — ранний доступ запрещён.
let x = 10;
const y = 20;
console.log(x, y);
function myFunction() {
console.log('Hello, world!');
}
myFunction();
Итог
Современный стиль + запрет use-before-define снимают большинство сюрпризов hoisting.