缘由:
有一道题:实现一个函数sum ,运算结果可以满足如下预期sum(1,2,3).valueOf() //6sum(2,3)(2).valueOf() //7sum(1)(2)(3)(4).valueOf() //10sum(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(); //6sum(2,3)(2).valueOf(); //7sum(1)(2)(3)(4).valueOf(); //10sum(1)(4,1)(2).valueOf(); //9