函数柯里化

函数柯里化

Posted by Lan on July 13, 2020

函数柯里化

函数式编程中的重要概念,重要可以减少代码冗余,增加可读性。

只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。

  • 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);
} } ``` - 应用场景