亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 505 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號