第一次認(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;
}
///可以簡寫成
(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ù)就可以使用柯里化
歡迎指出問題和提出建議哦