实现一个函数,运算结果可以满足如下预期结果:
add(1)(2) // 3
add(1, 2, 3)(10) // 16
add(1)(2)(3)(4)(5) // 15
话不多说,实现如下:
function add(){
var arr=Array.prototype.slice.call(arguments)
function fn(){
arr=arr.concat(Array.prototype.slice.call(arguments))
return fn
}
fn.valueOf=function(){
return arr.reduce(function(a,b){
return a+b
})
}
return fn
}
思路很简单,首先要实现调用之后还可以调用无线调用的效果必须这么写,function f(){return f};
实现最后的求和就必须又一个作用域,这个作用下可以把所有输入值保存下来,所以不是如下这样函数
var add=(function() {
var arr=[]
var ad=function (){
arr=arr.concat(Array.prototype.slice.call(arguments))
return ad
}
ad.valueOf=function(){
return arr.reduce(function(a,b){
return a+b
})
}
return ad
})()
原文:http://www.cnblogs.com/wl843022618/p/7751563.html