函数柯里化

216 阅读1分钟

函数柯里化就是高阶函数的一种表现形式:

它允许一个函数a先传入一部分参数,然后这个函数返回另外一个函数b,函数b里可以对a函数调用时传入的参数进行处理。接着可以继续调用函数b,并且传入剩下的参数。

下面演示一个函数柯里化的面试:

// 实现一个add方法,使计算结果能够满足如下预期: add(1)(2)(3) = 6; add(1, 2, 3)(4) = 10; add(1)(2)(3)(4)(5) = 15;

值得注意的地方是:当用console.log打印一个对象的时候,会调用这个对象的toString方法,所以这里对toString方法进行了重写。

function add(){
    let args=Array.prototype.slice.call(arguments);
    function adder_(){
        args=args.concat(Array.prototype.slice.call(arguments));
        return adder_;
    }
    adder_.toString=()=>{
            return args.reduce((a,b)=>{
            return a+b;
        })
    }

    return adder_;
}

console.log(add(1,3,4)(40)(50))