redux里compose函数源码看不太懂

下面是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))

}

希望能得到各位详细的解析,谢谢


胡子哥哥
浏览 483回答 3
3回答

繁华开满天机

没有看过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)))其实执行过程还是跟上面的一样,只是写法不同而已

江户川乱折腾

了解一下Array的reduce函数就好理解了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript