Функции первого класса

Говорят, что в языке программирования есть функции первого класса, если с функциями в этом языке обращаются как с любой другой переменной. Например, передают в качестве аргумента другим функциям, возвращают из другой функции или присваивают переменной в качестве значения.

Примеры

Присвоение функции в качестве значения переменной

js
const foo = () => {
  console.log("foobar");
};

// Вызов функции с использованием переменной
foo(); // Выведет в консоль строку "foobar"

Мы присвоили анонимную функцию переменной, а затем использовали эту переменную для вызова функции, добавив круглые скобки () в конце.

Примечание: Даже если у вашей функции было имя, вы можете использовать имя переменной для её вызова. Именование функции будет полезно при отладке кода, но это не повлияет на то, как мы её вызываем.

Передача функции в качестве аргумента

js
function sayHello() {
  return "Привет, ";
}

function greeting(helloMessage, name) {
  console.log(helloMessage() + name);
}

// Передача функции `sayHello` в качестве аргумента функции `greeting`
greeting(sayHello, "JavaScript!"); // Выведет в консоль строку "Привет, JavaScript!"

Мы передали нашу функцию sayHello() в качестве аргумента функции greeting(), это показывает, что функцию можно рассматривать в качестве значения.

Примечание: Функция, которую передают в качестве значения другой функции (в данном примере sayHello()), называется колбэк-функцией.

Возвращение функции

js
function sayHello() {
  return () => {
    console.log("Привет!");
  };
}

// Вызов анонимной функции, которую возвращает функция `sayHello`. Обратите внимание на повторяющиеся два раза круглые скобки
sayHello()(); // Выведет в консоль строку "Привет!"

В этом примере мы возвращаем функцию из другой функции, это возможно, потому что функции в JavaScript могут быть значениями.

Примечание: Функция, которая возвращает функцию или принимает другие функции в качестве аргументов, называется функцией высшего порядка.

Смотрите также