一、什么是函數(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ù)作為返回值輸出,提前返回。