Найти тему

Функции высшего порядка

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

Примером может быть встроенный метод массива filter();

Метод filter() создаёт новый массив со всеми элементами, прошедшими проверку, задаваемую в передаваемой функции.

Создадим новый массив с четными числами:

let numbers = [1,2,3,4,5,6];
function isEven(x){
return x % 2 === 0;
}

let evenNumbers = numbers.filter(isEven);
//2 4 6

Методы map() и reduce() тоже функции высшего порядка.

Создадим сами функцию высшего порядка.

Передаем функцию в качестве параметра (в нашем случае process();). До начала работы функции process(); выведем "начало загрузки", после - "конец загрузки".

function doWithLoading(fn){
console.log("начало загрузки");
let returnValue = fn();
console.log("конец загрузки");
return returnValue;
}

function process() {
console.log("загружаем...");
}

doWithLoading(process);
// начало загрузки
// загружаем...
// конец загрузки

Замыкание - это работа функции высшего порядка, которая возвращает другую функцию.

Пример:

function createGenerator(prefix){
let index = 0;
return function generateNewID(){
index++;
return prefix + index.toString();
}
}

let generateNewID = createGenerator("вызов номер: ");
console.log(generateNewID()); //вызов номер: 1
console.log(generateNewID()); //вызов номер: 2
console.log(generateNewID()); //вызов номер: 3

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

Наука
7 млн интересуются