export default function compose(...funcs) {
if (funcs.length === 0) {
return arg => arg
}
if (funcs.length === 1) {
return funcs[0]
}
// what does this line do???
return funcs.reduce((a, b) => (...args) => a(b(...args)))
}
我正在从redux模块中读取compose.js源代码。我知道reduce函数的基础,它只是在集合中的每个元素中调用reducer并返回单个输出。它有一个累加器,用于存储中间结果并将其传递给reducer的每个调用。但是减少该代码对我来说有点含糊,有人可以用外行的方式解释它吗?
答案 0 :(得分:0)
(a, b)
可以写为(previousComposition, currectFunc)
。减少的结果是一个函数使用(...args)
-一个或多个参数。
每个减少的“循环”都返回一个函数,该函数用当前函数a(b(...args))
组成先前的合成-可以理解为(a . b)(x) = a(b(x))
。
仅返回一个函数,这意味着这些函数尚未执行。当结果合成函数被调用时,它首先发生:var res = compose(a, b)(x)
示例:
var plus1 = x => x + 1;
var plus2 = x => x + 2;
var mult2 = x => x * 2;
var composedFn = compose(mult2, plus2, plus1);
// (...x) => mult2(plus2(plus1(...x)))
var res = composedFn(3);
console.log(res); // 12
如示例中所示,首先应用plus1
,然后应用plus2
,最后应用mult2
。