柯里化函数
1.高阶函数的一种,即接收函数为参数,返回一个处理函数的函数。
2.我们在不知道一个函数的参数个数的时候,做收集参数的操作;等待传参的数量达到接收函数的参数个数,再执行这个接收的函数。
3.如果这个函数的传参数量没有达到接收函数的参数数量或者我们规定的参数数量,返回一个函数,继续去做收集参数的事情,等到参数收集完毕,执行这个函数。
// 柯里化函数封装
function curry(fn,args){
// 保存当前this
let _this = this;
// 统计传入函数的参数数量--也可以根据实际需求自己设定
let len = fn.length;
// 收集参数
args = args||[];
// 返回一个函数
return function(){
// 继续收集参数
let _args=args.concat([].slice.call(arguments));
// 判断参数的收集是否达到统计参数的数量
if(_args.length<len){
// 不满足,继续期待
return curry.call(_this,fn,_args);
}
// 满足,就执行传入的函数
return fn.apply(_this,_args);
}
};
举个梨子
如果一个求和函数,未知参数数量,怎么执行更爽:
function add(a,b,c,d,e){
return a+b+c+d+e;
}
let newAdd=curry(add);
console.log(newAdd(1,5)(2)(3,8));//19
console.log(newAdd(1)(2)()()(3)()(4)(5))//15
随便你执行几次,等参数收集到了五个,就执行add函数进行打印;传参不够,返回一个函数继续给你传参。