近期在看函数柯理化的一些视频,自己记一下以防忘记
递归实现柯理化
function curry(fn,len){
var len = len||fn.length;
var func = function(fn){
var _arg = [].slice.call(arguments,1);
return function(){
var newArgs = _arg.concat([].slice.call(arguments));
return fn.apply(this,newArgs);
}
}
return function(){
var argLen = arguments.length;
if(argLen<len){
var formatedArr = [fn].concat([].slice.call(arguments));
return curry(func.apply(this,formatedArr),len - argLen)
}else{
return fn.apply(this,arguments)
}
}
}
function add(a,b,c,d){
return a+b+c+d
}
var add2 = curry(add)
var res = add2(4)(2)(2)(1)
var res = add2(1,2)(3,4)
var res = add2(1)(2,3,4)