柯里化是函数式变成的基础之一,js写函数式常用的工具之一,此处试着实现一个 柯里化函数工具
var curry=function(f){
var fun=""
var len= f.length //参数长度
var args=[] //参数保存用于延迟执行的时候添加参数
return fun= function (){ //延迟执行函数
for(var i=0;i<arguments.length;i++){
if(len==args.length){ //参数长度达成 开始执行函数
args=[]
return f.apply(null,args)
} else{
args.push(arguments[i]); //push参数进入参数保存列表
if(len==args.length){ //每次push都要检查是否达成条件 出发执行函数动作
args=[];
return f.apply(null,args)
}
}
}
return fun
}
}
函数组合用于将多个函数组合成一个函数,流式的处理数据
var compose = function() {
var args=arguments; //获取所有函数
return function(x) {
var result=null;
for(var i=args.length;i>0;i--){ //反转函数
if(i==args.length){
result= args[i-1].call(null,x)
}else{
result= args[i-1].call(null,result)
}
}
return result;
};
};
测试:
var gg=1234;
function Sum(a,b,c,d,e,f,g,h,j){
return gg+a+b+c+d+e+f+g+h+j;
}
var xxx=curry(Sum);
console.log(xxx(1)); //[Function]
console.log(xxx(2)); //[Function]
console.log(xxx(4,5,6)); //[Function]
console.log(xxx(7,8,9)); //[Function]
console.log(xxx(10)); //52