Назад к вопросам
Junior
93
questionbank

Что ты знаешь о различиях между выражением функции (function expression) и объявлением функции (function declaration)?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Выражение функции может быть как именованным, так и анонимным. Объявление функции всегда имеет имя.

Основное отличие — механизм подъема (hoisting):

  • Объявление функции: Поднимается полностью, включая тело. Функция доступна для вызова в коде до ее фактического объявления.
  • Выражение функции: Поднимается только переменная, которой оно присваивается (если используется var). Сама функция доступна только после того, как интерпретатор достигнет строчки с ее определением. С let и const нет подъема даже для переменной.
// Объявление функции
console.log(declarationFunc()); // Работает, функция поднята

function declarationFunc() {
  return "Я - объявление";
}

// Выражение функции
// console.log(expressionFunc()); // Вызовет TypeError или ReferenceError (зависит от var/let/const)

const expressionFunc = function() {
  return "Я - выражение";
};

console.log(expressionFunc()); // Работает после определения

Объявления функций предпочтительнее для обычного использования, так как их порядок в коде не влияет на возможность вызова. Выражения функций часто используются для:

  • Создания анонимных функций (например, в качестве аргументов или сразу вызываемых функциональных выражений - IIFE).
  • Условного определения функций.
  • Создания замыканий.