启事:
有一道题:
完成一个函数sum ,运算效果能够满足以下预期
sum(1,2,3).valueOf() //6
sum(2,3)(2).valueOf() //7
sum(1)(2)(3)(4).valueOf() //10
sum(1)(4,1)(2).valueOf() //9
明眼一看就晓得是把一切的参数相加,每次返回该函数,不停挪用。
怎样完成呢?请看:
function sum(){
var args = [].slice.call(arguments);
var fn = function() {
var newArgs = args.concat([].slice.call(arguments));
return sum.apply(null,newArgs);
}
fn.valueOf = function() {
return args.reduce(function(a, b) {
return a + b;
})
}
return fn;
}
sum(1,2,3).valueOf(); //6
sum(2,3)(2).valueOf(); //7
sum(1)(2)(3)(4).valueOf(); //10
sum(1)(4,1)(2).valueOf(); //9