什么是柯里化攒霹?
在數(shù)學和計算機科學中,柯里化是一種將使用多個參數(shù)的一個函數(shù)轉(zhuǎn)換成一系列使用一個參數(shù)的函數(shù)的技術
具體就是:只傳遞函數(shù)的一部分參數(shù)來調(diào)用它催束,讓它返回一個函數(shù)去處理剩下的參數(shù)
例子:
function add(a,b){
return a + b
}
// 一般執(zhí)行
add(1,2) // 3
// 柯里化之后
var addCurry = curry(add);
addCurry(1)(2); // 3
下面來實現(xiàn)一個curry函數(shù)
function curry(fn){
function _c(length,args){
return length === 0 ?
fn.apply(null,args) :
function(x){
return _c(length - 1,args.concat(x))
}
}
return _c(fn.length,[])
}
// es6
const curry = fn => {
const _c = (length, args) => {
return length === 0 ?
fn(...args) :
x => _c(length - 1, [...args,x])
}
return _c(fn.length,[]);
}
function add(a,b,c,d){
return a + b + c + d;
}
var addCurry = curry(add);
addCurry(1)(2)(3)(4); // 12
上面的curry的實現(xiàn)具體過程就是,首先通過fn.length取得原函數(shù)的參數(shù)長度塔淤,然后不停的判斷這個長度速妖,如果長度為0,就執(zhí)行fn函數(shù)罕容,否則長度減一稿饰,并把新傳入的參數(shù)合并到args里面露泊。