为了账号安全,请及时绑定邮箱和手机立即绑定

redux里compose函数源码看不太懂

redux里compose函数源码看不太懂

胡子哥哥 2019-03-21 18:15:07
下面是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)))

其实执行过程还是跟上面的一样,只是写法不同而已


查看完整回答
反对 回复 2019-04-08
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

了解一下Array的reduce函数就好理解了


查看完整回答
反对 回复 2019-04-08
  • 3 回答
  • 0 关注
  • 482 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信