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