什麼是柯里化
嚴格來説一個函數只有一個參數,將具有多個參數的函數轉換為單參數函數鏈的方式,這就是currying。後來演變成支持不定參數的函數鏈的形式流行起來。
// 在JS中可以常見這樣調用方式
add(1)(2)(3) // 6
add() // 輸出結果
> 6
// 或者
add(1)(2)(3)() === 6
// 或者
add(1)
add(2)
add(3)
add() === 6
柯里化的作用
- 閉包
- 延遲執行
- 參數複用
JS中實現柯里化
這是個柯里化的裝飾器
function Currying(fn) {
let args = [].slice.call(arguments,1);
function g() {
if(arguments.length > 0){
args.push.apply(args, arguments)
return g
} else {
return fn.apply(fn, args)
}
}
return g
}
做個測試
// 定義一個求和函數
function add() {
let count = 0
if(arguments.length > 0) {
for(let i = 0; i < arguments.length; i++){
count += arguments[i]
}
}
return count
}
// 測試
const _add = Currying(add)
_add(1)
_add(2)
_add(3)()
// > 6