函数柯里化就是高阶函数的一种表现形式:
它允许一个函数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))