问题
实现一个函数,运算结果可以满足如下预期结果:
add(1)(2) // 3
add(1, 2, 3)(10) // 16
add(1)(2)(3)(4)(5) // 15
参考代码
function add () {
//将argument转换成数组
var args = Array.prototype.slice.call(arguments);
var fn = function () {
//拼接多次调用的参数为数组
var arg_fn = Array.prototype.slice.call(arguments);
//递归调用add
return add.apply(null, args.concat(arg_fn));
}
//最后一次返回fn时,自动调用valueOf
fn.valueOf = function () {
return args.reduce(function(a, b) {
return a + b;
})
}
return fn;
}
思路流程
- 利用闭包传递参数,将参数每次调用中拼接成长数组。
- 改写valueOf函数,最后一次返回的fn,会自动调用valueOf函数,从而输出计算和