Поиск по сайту
Ctrl + K
Вопросы по JS

Что такое функция высшего порядка в JavaScript?

Функция высшего порядка (higher-order function) — это функция, которая выполняет одну из следующих операций:

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

    Пример функции высшего порядка:

    // Функция принимает другую функцию как аргумент
    function greet(name, callback) {
      console.log("Hello " + name);
      callback();
    }
    
    // В качестве второго аргумента передаем функцию
    greet("John", function() {
      console.log("This is a callback function!");
    });
    

    В этом примере:

    • Функция greet принимает другую функцию в качестве аргумента (callback), которая вызывается внутри greet. Таким образом, greet является функцией высшего порядка.

    Преимущества функций высшего порядка

    1. Обработка асинхронных операций

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

    Пример с использованием setTimeout:

    function executeAfterDelay(callback, delay) {
      setTimeout(callback, delay);
    }
    
    executeAfterDelay(() => {
      console.log("Executed after 2 seconds");
    }, 2000);
    

    Здесь:

    • setTimeout — это функция высшего порядка, которая принимает функцию в качестве аргумента и выполняет её через определённое время.

    2. Модификация поведения

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

    Пример с декоратором:

    function decorator(fn) {
      return function(...args) {
        console.log("Before function call");
        const result = fn(...args);
        console.log("After function call");
        return result;
      };
    }
    
    function sayHello(name) {
      console.log(`Hello, ${name}`);
    }
    
    const decoratedSayHello = decorator(sayHello);
    decoratedSayHello("Alice");
    

    В этом примере:

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

    3. Функции как возвращаемые значения

    Функции высшего порядка также могут возвращать другие функции. Это позволяет создавать более динамичные и гибкие структуры кода.

    Пример возвращения функции:

    function multiplier(factor) {
      return function(number) {
        return number * factor;
      };
    }
    
    const multiplyBy2 = multiplier(2);
    console.log(multiplyBy2(5));  // 10
    

    Здесь:

    • Функция multiplier возвращает новую функцию, которая умножает переданное значение на указанный множитель (factor).

    Заключение

    Функции высшего порядка — это мощный инструмент в JavaScript, который позволяет передавать и возвращать функции как значения. Они широко используются в асинхронном программировании, а также для создания гибких и модульных программных конструкций. Понимание функций высшего порядка позволяет создавать более выразительный и эффективный код, основанный на функциональных принципах.