缘由:
有一道题:
实现一个函数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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。