PassFront
  1. PassFront
  2. База знаний
  3. Функции

В чем разница между 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.

Другие вопросы раздела