Я пытаюсь понять концепцию композиции и последовательности в Javascript с помощью упражнения:
Защ. композиция
compose(f,g)(x) = f(g(x))
Защ. последовательность
sequence(f,g)(x) = g(f(x))
для большего количества аргументовsequence(f,g)(...args) = g(f(...args))
const sequence2 = (f1, f2) => (...args) => f2( f1(...args) );
const sequence = (f1, ...fRest) => fRest.reduce(sequence2, f1);
const f1 = (a, b) => {
console.log(`[f1] working on: ${a} and ${b}`);
return a + b;
}
const f2 = a => `Result is ${a}`;
const sequenceResult = sequence(f1, f1, f2)(1, 2, 5);
console.log(sequenceResult);
Консоль показывает:
[f1] working on: 1 and 2
[f1] working on: 3 and undefined
Result is NaN
Похоже, что вторая функция в последовательности не может получить доступ к аргументам: я что-то упускаю или это неправильный подход к работе с параметрами? (Функция последовательности работает для функций без параметров).
Здесь JSFiddle
g(f(x))
g
не может (и не должен!) получить доступ кx
. Все нормально и ведет себя так, как ожидалось. - person Bergi   schedule 20.04.2020