Функции высокого порядка — это функции, которые принимают другую функцию в качестве параметра или возвращают другую функцию.
В javascript функции могут рассматриваться как переменные, что позволяет возвращать их или передавать в качестве параметров.
Реализация функции высокого порядка
Давайте реализуем простую функцию высокого порядка, которая принимает другую функцию и вызывает ее внутри своего тела
function doSomething(action) {
action(); // Hi
}
function actionFunction() {
console.log("Hi");
}
doSomething(actionFunction);
Мы вызвали функцию doSomething и передали ей в качестве параметра функцию actionFunction, а она просто вызвала ее внутри своего тела, и это совершенно нормально для javascript.
Давайте создадим еще одну функцию высокого порядка, но теперь вместо этого мы будем возвращать из нее функцию
function getAction() {
return function() {
console.log("Hi");
}
}
const action = getAction();
action(); // hi
Мы сохранили функцию, возвращенную getAction, а затем вызвали ее, чтобы записать привет в консоль.
Существующие функции высокого порядка в Javascript
В язык javascript встроено множество функций высокого порядка, сейчас мы рассмотрим некоторые из них, которые являются методами массивов
метод forEach
let arr = [1, 2, 3, 4, 5];
function log(x) {
console.log(x); // 1, 2, 3, 4, 5
}
arr.forEach(log);
функция forEach циклически проходит по массиву и каждый раз вызывает переданную функцию, передавая ей элемент, по которому идет итерация
функция map
let arr = [1, 2, 3, 4, 5];
function double(x) {
return x * 2;
}
const newArr = arr.map(double);
console.log(newArr); // [ 2, 4, 6, 8, 10 ]
метод map заменяет значение, по которому идет итерация, на значение, которое возвращает переданная функция, а затем возвращает новый массив
метод фильтра
let arr = [1, 2, 3, 4, 5];
function isPair(x) {
return x % 2 == 0;
}
const pairs = arr.filter(isPair);
console.log(pairs); // [ 2, 4 ]
метод filter сохраняет только те элементы массива, которые переданы в функцию, и возвращает true