函数柯里化经典笔试题

Q:

实现一个add方法,使计算结果能够满足如下预期:

1
2
3
add(1)(2)(3) = 6
add(1, 2, 3)(4) = 10
add(1)(2)(3)(4)(5) = 15

A:

1
2
3
4
5
6
7
8
9
10
11
12
13
function add(){
var args = [].slice.call(arguments);
var fn = function(){
var newArgs = args.concat([].slice.call(arguments));
return add.apply(null,newArgs);
}
fn.toString = function(){
return args.reduce(function(a, b) {
return a + b;
})
}
return fn ;
}