概述
curry(add,1,2,3)(1)(2)(3,4,5,5)()
函数柯里化(curry)是说,把函数参数分多次传入,最终获得的结果和一次性输入全部参数一致。好的柯里化函数可以自定义函数func,作为第一个参数传入。
实现
function curry(func){
var args=[].slice.call(arguments,1)
var _func=function(){
if(arguments.length===0){
return func.apply(this,args)
}else{
[].push.apply(args,arguments)
return _func
}
}
return _func
}
function add(){
return [].reduce.call(arguments,function(a,b){return a+b})
}
console.log(curry(add,1,2,3)(1)(2)(3,4,5,5)()) //26
理解
1.参数分多次输入:通过闭包保存之前输入的参数
2.自定义函数func:通过apply函数实现当前context调用func
ps.arguments是伪数组,不能调用数组的方法,需要靠call函数的帮助