В чем разница между Function Declaration и Function Expression?
Функции
Function Declaration и Function Expression — два способа создать функцию, различающиеся hoisting и моментом, когда функция становится доступна.
Function Declaration (объявление)
function sum(a, b) {
return a + b;
}- Всплывает целиком: доступна до строки объявления.
- Всегда имеет имя.
Function Expression (выражение)
const sum = function (a, b) {
return a + b;
};- Присваивается переменной; работает hoisting переменной, а не функции.
- До инициализации недоступна (TDZ для
let/const,undefinedдляvar). - Может быть анонимной или именованной.
Практическая разница
declared(); // ок — всплыла
function declared() {}
expressed(); // TypeError / ReferenceError
const expressed = function () {};Что выбрать
- Expression (обычно с
const) — предсказуемее: нельзя вызвать раньше объявления, стрелки — тоже выражения. - Declaration — удобно для «верхнеуровневых» утилит, которые хочется вызывать выше по коду.
Коротко для собеседования
Declaration всплывает целиком и доступна до объявления; Expression привязана к переменной и до инициализации недоступна. Современный код чаще использует выражения с const.