胡子哥哥
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)))
其實執行過程還是跟上面的一樣,只是寫法不同而已
添加回答
舉報
0/150
提交
取消