01.ii Function Expression

Function Expression - объявление функции в контексте какого-либо выражения, например присваивания.

// Function Declaration
function sum(a, b) {
  return a + b;
}

// Function Expression
const sum = function(a, b) {
  return a + b;
};

// Arrow funciton
const sum = (a, b) => a + b;

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

  • функция всегда находится в зоне выражения;

  • имеет опциональное имя;

  • не воздействует на объект переменных;

  • и создается на этапе интерпретации кода контекста.

  • такую функцию нельзя вызвать до того, как интерпретатор дойдет до выполнения выражения

Специально для работы с рекурсией в JavaScript существует особое расширение функциональных выражений, которое называется Named Function Expression (сокращённо NFE) или «именованное функциональное выражение». Особенность NFE в том, что она может рекурсивно вызывать себя по своему локальному имени:

const func = function sayHi(...) {
    /* тело функции */
    return 1 + sayHi(...)
};

Предпочитайте использовать NFE:

  • Легче читать сообщения об ошибке.

  • Легче отлаживать

  • Имя функции позволяет понять что она делает

  • Можно делать рекурсивные вызовы этой функции

В отличие от function declaration, function expression всегда находится в зоне выражения:

// в скобках (оператор группировки) может быть только выражение
(function foo() {});

// в инициализаторе массива - всегда выражение
[function bar() {}];

// запятая также оперирует выражениями
1, function alsoFE() {};

Last updated