67-一道巧妙的面试题

博客园

实现一个函数,运算结果可以满足如下预期结果:

1
2
3
add(1)(2) // 3
add(1, 2, 3)(10) // 16
add(1)(2)(3)(4)(5) // 15

解法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function add () {
var args = Array.prototype.slice.call(arguments);

var fn = function () {
var arg_fn = Array.prototype.slice.call(arguments);
return add.apply(null, args.concat(arg_fn));
}

fn.valueOf = function () {
return args.reduce(function(a, b) {
return a + b;
})
}

return fn;
}