函數(shù)柯里化

一、什么是函數(shù)柯里化

Javascript高級(jí)程序設(shè)計(jì)(第3版):用于創(chuàng)建已經(jīng)設(shè)置好了一個(gè)或多個(gè)參數(shù)的函數(shù)。基本方法是使用一個(gè)閉包返回一個(gè)函數(shù)。
維基百科:柯里化(英語(yǔ):Currying),是把接受多個(gè)參數(shù)的函數(shù)變換成接受一個(gè)單一參數(shù)(最初函數(shù)的第一個(gè)參數(shù))的函數(shù),并且返回接受余下的參數(shù)而且返回結(jié)果的新函數(shù)的技術(shù)。

官方解釋看得有點(diǎn)懵,大白話(huà)概括一下:
用大白話(huà)來(lái)說(shuō)就是只傳遞給函數(shù)一部分參數(shù)來(lái)調(diào)用它,讓它返回一個(gè)新函數(shù)去處理剩下的參數(shù)。
更簡(jiǎn)單一點(diǎn)就是:

  • 輸入是一個(gè)函數(shù),并且這個(gè)函數(shù)擁有n個(gè)參數(shù)
  • 輸出也是一個(gè)函數(shù),并且可以使用fn()()()這種方式調(diào)用
  • 參數(shù)被柯里化過(guò)程中的函數(shù)被拆分

二、簡(jiǎn)單的函數(shù)柯里化案列

//普通函數(shù)
const sum= (x, y, z)=> {
  return x + y + z
}
//函數(shù)柯里化
const sum = x=>{
  return function(y) {
    return function(z) {
      return x + y + z
    }
  }
}
//普通函數(shù)調(diào)用
sum(1,2,3)
// 函數(shù)柯里化調(diào)用
sum(1)(2)(3)
const fn = sum(1)
const fn1 = fn(2)
fn1(3)

三、函數(shù)柯里化的作用和特點(diǎn)

1.參數(shù)復(fù)用

有的時(shí)候同一種規(guī)則可能會(huì)反復(fù)使用(比如校驗(yàn)手機(jī)的參數(shù)),這就造成了代碼的重復(fù),利用柯里化就能夠消除重復(fù),達(dá)到復(fù)用參數(shù)的目的。
柯里化的一種重要思想:降低適用范圍,提高適用性

2.提前返回

提前返回或者說(shuō)提前確認(rèn),函數(shù)柯里化后可以提前處理部分任務(wù),返回一個(gè)函數(shù)處理其他任務(wù)

3.延遲執(zhí)行

返回的函數(shù)都不會(huì)立即執(zhí)行,而是等待調(diào)用。

三、函數(shù)柯里化的好處

  • 可以把函數(shù)式編程變得簡(jiǎn)潔,沒(méi)有冗余。
  • 盡管有多個(gè)參數(shù),仍然可以保留數(shù)學(xué)函數(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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