下面是Redux里compose方法源码:export default function compose(...funcs) { if (funcs.length === 0) { return arg => arg } if (funcs.length === 1) { return funcs[0] } const last = funcs[funcs.length - 1] const rest = funcs.slice(0, -1) return (...args) => rest.reduceRight((composed, f) => f(composed), last(...args))}希望能得到各位详细的解析,谢谢
3 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
没有看过redux源码,不过看得懂这个compose函数,现在来说说:
首先 compose 传入的是一串不确定个数的function 作为参数,参数个数大于或者等于2,其实执行过程的是调用一串function队列,从右向左调用,从执行compose方法来说明:
compose(fn1 ,fn2, fn3, ...fn[n-2],fn[n-1],fnn)(...args) ;
上面的执行过程等价于:
fn1(fn2(......(fn[n-2](fn[n-1](fnn(...args))))))
再说的清楚点就是:
compose(a,b,c,d)(...args) = a(b(c(d(...args))))
楼主去看看Array的原生方法reduce 和 reduceRight,就很快能理解了。
今天去看了一下redux源码,发现写法已经变了,最后一步变成了
return funcs.reduce((a, b) => (...args) => a(b(...args)))
其实执行过程还是跟上面的一样,只是写法不同而已
添加回答
举报
0/150
提交
取消