Функции обратного вызова

1. Введение

В JavaScript функции не отличаются от чисел, строк или массивов - это просто специальный тип данных (объект), который можно хранить в переменной или передавать как аргумент в другую функцию.

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

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

const printMessage = function (message) {
  console.log(message);
};

const higherOrderFunction = function (callback) {
  const string = 'HOCs are awesome';
  callback(string);
};

higherOrderFunction(printMessage);
Copy

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

2. Абстрагирование повторения

Абстракция — скрытие деталей реализации. Позволяет думать о задачах на более высоком (абстрактном) уровне.

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

Можем ли мы абстрагировать «делать что-то N раз» как функцию? - да, напишем функцию, которая вызывает console.log() N раз.

Но что, если мы хотим сделать что-то, кроме логирования чисел? Поскольку «делать что-то» можно представить как функцию, а функции - это просто значения, мы можем передать действие как аргумент.

Часто callback-функции анонимны и объявляются как стрелочные функции прямо во время передачи.

3. Фильтрация массива

Напишем функцию фильтрации элементов массива. Первый параметр array - это массив, будем перебирать его используя цикл for...of.

Второй параметр test - это callback-функция, которую будет необходимо выполнить для каждого элемента массива.

Функция filter создает новый массив, в который будет добавляться результат выполнения callback-функции test над каждым элементом массива array. Результатом работы функции будет массив отфильтрованных элементов.

Если элемент массива проходит тест, то есть callback-функция возвращает true, он добавляться в отфильтрованный массив.

Обратите внимание, функция filter, вместо удаления элементов из оригинального массива, создает новый массив только тех элементов, которые проходят тест. Это - чистая функция, она не изменяет исходные данные.

При таком подходе мы можем выполнять фильтрацию массива по критерию используя всего одну функцию для перебора, а операции над каждым элементом будут зависеть от callback-функции.

Last updated