Может кто-нибудь объяснить мне, как Array.reduce может поместить функции в качестве аргументов в состав функции следующим образом:
const composeB = (f, g) => x => f(g(x))
const add = a => b => a + b
const add5 = add(5)
const double = a => a * 2
const add5ThenDouble = [double, add5].reduce(composeB)
console.log(add5ThenDouble(6)); // 22
Итак, насколько мне известно (этого недостаточно), функция редуктора состоит в том, что Array .reduce перебирает массив таким образом - он берет каждое из значений массива и помещает их через функцию обратного вызова с другим аргументом (давайте назовем его аккумулятором). Следующее значение массива будет под go той же функцией обратного вызова, но с (в конечном итоге) измененным значением аккумулятора.
Что меня смущает в приведенном выше примере кода:
1) Массив - это список functions [double, add5].
2) На первой итерации composeB получит аргументы: f = аккумулятор (пустое значение), g = double (функция). ComposeB должен вернуть emptyvalue (double (6)) (или, может быть, нет ??)
Я знаю, что что-то упустил, но может кто-нибудь объяснить мне, что?