如何实现一个通用的柯里化函数?
- 需要接收一个需要柯里化的函数
- 需要存放每一次函数调用的参数
- 对参数进行判断:如果参数数目不够原函数的参数数目,不调用原函数,返回新的函数继续接收下一个参数;反之则调用函数
作用:
- 参数复用,逻辑复用
- 延时计算,延时执行
function add(num1,num2, num3, num4, num5){
return num1+num2+ num3+ num4+ num5
}
function curry(fn){
let self = this
return function curried(...args){
if(args.length >= fn.length){
return fn.apply(self, args)
}else{
return function(...otherArgs){
return curried.apply(self, [...args, ...otherArgs])
}
}
}
}
let newAdd = curry(add)
console.log(newAdd(20 ,30,40,50,60))
console.log(newAdd(20)(30,40,50,60))
console.log(newAdd(20)(30,40)(50,60))
console.log(newAdd(20,30,40)(50,60))