Function declaration можно вызвать до строки объявления в том же scope. Function expression — нет: функция появляется только после выполнения присваивания.
Подробности
Движок не двигает текст. При создании области declaration сразу связана с функцией. Expression создаётся при вычислении; до этого действует правило var/let/const.
hoistedFunction(); // окfunctionhoistedFunction() {
console.log('This function is hoisted');
}
nonHoistedFunction(); // ошибкаvar nonHoistedFunction = function () {
console.log('This function is not hoisted');
};
Итог
Declaration доступна «сразу», expression — только после инициализации переменной.
Объясните hoisting применительно к функциям · Sobeso