大聲告訴我什么是柯里化函數(shù)

第一次認(rèn)識(shí)這個(gè)詞,在我學(xué)習(xí)react-redux的時(shí)候,碰到了middlewere以及其函數(shù)const middlewere = store=>next=>action {...},剛開始我真的是一臉懵逼,這是個(gè)啥?

仔細(xì)一看才發(fā)現(xiàn),這不是ES6的箭頭函數(shù)嘛,就是換了個(gè)衣服,我就不認(rèn)識(shí)了,實(shí)在是慚愧

那么就先來給它穿衣服吧!
箭頭函數(shù)中如果只是返回一條語句的話我們可以將{}return值省略,例如:

(a)=>{
      return a;
}

///可以簡(jiǎn)寫成
(a)=>a;

那么同理得出store=>next=>action {...}函數(shù)為:

const middlewere = (store)=>{
                       return (next)=>{
                                     return (action)=>{ ... }
                              }
                    }

這樣是不是就認(rèn)識(shí)了呢?那么這和柯里化函數(shù)有什么關(guān)系呢?憋著急,慢慢往下看

柯里化函數(shù)

柯里化函數(shù)概念:只傳遞給函數(shù)一部分參數(shù)來調(diào)用它,讓它返回一個(gè)函數(shù)去處理剩下的參數(shù)。
什么意思呢,舉個(gè)栗子就知道了哇

const concat3Words =  (a, b, c) => {
    return a+b+c;
};

const concat3WordsCurrying = (a) => {
    return (b) => {
        return (c) => {
            return a+b+c;
        };
    };
};

console.log(concat3Words("a","b","c"));  //abc
console.log(concat3WordsCurrying("a")("b")("c"));  //abc

concat3WordsCurrying每次調(diào)用都返回一個(gè)新的函數(shù),該函數(shù)接受另一個(gè)調(diào)用,然后又返回一個(gè)新的函數(shù),直至最后返回結(jié)果,分布求解,層層遞進(jìn),這就是柯里化函數(shù),是不是和上面的middlewere有點(diǎn)像呢,對(duì)滴,middlewere就是個(gè)柯里化函數(shù)

柯里化的基礎(chǔ)
  • 函數(shù)可以作為參數(shù)傳遞
  • 函數(shù)能夠作為函數(shù)的返回值
  • 閉包
柯里化的作用
  • 延遲執(zhí)行:不斷的柯里化,累積傳入的參數(shù),最后執(zhí)行。
  • 參數(shù)復(fù)用:當(dāng)在多次調(diào)用同一個(gè)函數(shù),并且傳遞的參數(shù)絕大多數(shù)是相同的,那么該函數(shù)就可以使用柯里化

歡迎指出問題和提出建議哦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容