Я недавно пытался понять состав функции в javascript. Я понял, что такое карри и как она работает, но я видел этот код и не могу его понять. Это функциональная композиция с использованием .reduce(...)
. Это код:
const compose = (...fns) => fns.reduce((f, g) => (...args) => f(g(...args)));
const add5 = x => x + 5;
const add10 = x => x + 10;
const multiply = (x, y) => x * y;
const multiplyAndAdd5 = compose(
add10,
add5,
multiply
);
console.log(multiplyAndAdd5(5, 2));
Что я не понимаю, так это функция уменьшения, я попытался разбить ее на следующее:
const compose = (...fns) => fns.reduce(
(f, g) => (...args) => {
console.log("f: ");
console.log(f);
console.log("g: ");
console.log(g);
for(let i = 0 ; i < 3 ; i++){
console.log('');
}
return f(g(...args))
},
);
В консоли это показывает:
f:
(...args) => {
console.log("f: ");
console.log(f);
console.log("g: ");
console.log(g);
// console.log("args: ");
// console.log(...args);
// console.log(f(g(...args…
g:
(x, y) => x * y
f:
x => x + 10
g:
x => x + 5
15
25
Чего я не понимаю, так это то, что на самом деле аккумулятор находится в этой функции и в первой части функции уменьшения, f сама функция такова, что такое f (g (... args)) в этой ситуации?
Кто-нибудь знает, как работает композиция функций в javascript с использованием .reduce () ?