Понятия не имею ... может ли JS создать функцию из функции.
Чтобы ответить на эту часть вашего вопроса, да, Javascript может создать функцию из функции.Любая функция может возвращать другую функцию, и типичные способы сделать это - создать функцию factory или использовать функцию curry для создания новых функций:
Factory
Функция, которая возвращает другую функцию.Из-за Javascript-замыканий вы можете установить «закрытые» переменные, которые может видеть возвращаемая функция, но вызывающая функция не может получить к ним доступ:
function addTwoFactory() {
let a = 2;
return function(b) {
return a + b;
}
}
let f1 = addTwoFactory();
let f2 = addTwoFactory();
console.log(f1(3)); // 5
console.log(f2(3)); // 5
Может также создавать настраиваемые фабрики, которые могут создавать различные виды методов:
function makeAdder(a) {
return function(b) {
return a + b;
}
}
let addTwo = adderFactory(2);
let addThree = adderFactory(3);
console.log(addTwo(3)); // 5
console.log(addThree(3)); // 6
Curry
Функция curry - это идея взять базовую функцию, которая принимает несколько параметров, и «запекать» один из параметров для более легкого повторного использования:
function adder(a, b) {
return a + b;
}
function makeAdder(a) {
return function(b) {
return adder(a, b);
}
}
let addTwo = makeAdder(2);
console.log(addTwo(3)); // 5