创建一个函数,使得输入的函数能具有柯里化的功能。
function curry(fn){
var len=fn.length;
var arg=Array.prototype.slice.call(arguments,1);
return function(){
var args=arg.concat(Array.prototype.slice.call(arguments));
if(args.length<len){
return curry.call(null,fn,...args);
}else{
console.log(args);
return fn.apply(null,args);
}
}
}
下面是使用方法:
curry(add,4)(4,5)(6)//输出19
原理:
1、判断输入函数有几个参数。(这里假定有4个参数)
2、检验有没有收集齐4个参数,没有收集齐,递归调用,重新收集,收集齐了,就利用apply方法,传参数。
这个理解起来会有点难,建议使用谷歌浏览器的断点调试来看一下具体的过程~~