3 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
沒有看過redux源碼,不過看得懂這個(gè)compose函數(shù),現(xiàn)在來說說:
首先 compose 傳入的是一串不確定個(gè)數(shù)的function 作為參數(shù),參數(shù)個(gè)數(shù)大于或者等于2,其實(shí)執(zhí)行過程的是調(diào)用一串function隊(duì)列,從右向左調(diào)用,從執(zhí)行compose方法來說明:
compose(fn1 ,fn2, fn3, ...fn[n-2],fn[n-1],fnn)(...args) ;
上面的執(zhí)行過程等價(jià)于:
fn1(fn2(......(fn[n-2](fn[n-1](fnn(...args))))))
再說的清楚點(diǎn)就是:
compose(a,b,c,d)(...args) = a(b(c(d(...args))))
樓主去看看Array的原生方法reduce 和 reduceRight,就很快能理解了。
今天去看了一下redux源碼,發(fā)現(xiàn)寫法已經(jīng)變了,最后一步變成了
return funcs.reduce((a, b) => (...args) => a(b(...args)))
其實(shí)執(zhí)行過程還是跟上面的一樣,只是寫法不同而已
添加回答
舉報(bào)