乍看这道题目,我的反应是使用递归解决,但是当我尝试写的时候,会发现似乎有点无从下手,其实这道题很简单
法一
function sum(a){
let result = a
function add(b){
result += b
return add
}
add.valueOf = function(){
return result
}
return add
}
sum(1)(2)(3)(4).valueOf() // 10
这道题的另一种问法 sum(1)(2)(3)...(n)() 解决方案
let sum = function(a){
return function(b){
if(b){ // 这里可以过滤掉 b 是0的情况,换成if(b!==undefined)这样就可以接受0了
return sum(a+b)
}else{
return a
}
}
}
sum(1)(2)(3)(4)() // 10
更加简洁的方式
let sum = a=>b=>{return b?sum(a+b):a}// 解决
sum(1)(2)(3)(4)() // 10