Встречается на собеседованиях • сегодня

Что знаешь о различии между function expression и function declaration

Существует два основных способа объявления функций: Function Declaration (Объявление Функции) и Function Expression (Функциональное Выражение). Хотя оба подхода определяют функции, между ними есть несколько ключевых различий, влияющих на поведение и использование функций в коде.

Function Declaration (Объявление Функции)
Способ объявления функции, при котором используется ключевое слово `function`, за которым следует имя функции.

Пример:

javascript
function sum(a, b) {
  return a + b;
}

Особенности:

  • Поднятие (Hoisting): Поднимаются вверх их области видимости перед выполнением кода, что позволяет вызывать функции до их объявления в коде.
  • Область видимости: Определяется её местом в коде: в глобальной области видимости, в области видимости другой функции или в блочной области видимости (в строгом режиме).
  • Мутабельность: Имя функции является неизменным и не может быть переназначено.

Function Expression (Функциональное Выражение)
Способ объявления функции, при котором функция создаётся в рамках выражения. Функциональные выражения могут быть анонимными или именованными.

Пример:

javascript
const sum = function(a, b) {
  return a + b;
};

Особенности:

  • Поднятие (Hoisting): Переменные, объявленные через `var`, поднимаются, но инициализируются значением `undefined`, поэтому функциональное выражение не будет доступно до его объявления в коде. Если функциональное выражение объявлено через `let` или `const`, то оно вообще не будет доступно до объявления из-за временной мертвой зоны.
  • Анонимные и именованные функции: Функциональные выражения могут быть анонимными (не иметь имени) или именованными. Именованные функциональные выражения могут быть полезны для улучшения читаемости кода и при отладке.
  • Использование в выражениях: Функциональные выражения могут использоваться в любых местах, где допустимы выражения, например, в качестве аргументов для других функций.

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

Feb. 22, 2024, easyoffer

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы