函数柯里化
函数式编程中的重要概念,重要可以减少代码冗余,增加可读性。
只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。
- add(1)(2)(3).my()形式 ``` function f(x){ sum=x var fn=function(y){ sum+=y return fn } fn.my=function(){ return sum } return fn } f(1)(2)(3).my()//6
- add(1)(2)(3)
function f(){ var _arg=Array.prototype.slice.call(arguments) var fn=function(){ _arg.push(…arguments) return fn } fn.toString=function(){ return _arg.reduce(function(total,num){ return total+num }) } return fn } let t=f(1,2)(2)(3) //当String()时调用函数的toString()方法,上面提到也可以自定义最后的执行函数 console.log(String(t))//8
- 封装:
function curry (fn, currArgs) { return function() { let args = [].slice.call(arguments);
// 首次调用时,若未提供最后一个参数currArgs,则不用进行args的拼接
if (currArgs !== undefined) {
args = args.concat(currArgs);
}
// 递归调用
if (args.length < fn.length) {
return curry(fn, args);
}
// 递归出口
return fn.apply(null, args);
} } ``` - 应用场景