sum(1)(2)(3)...(n).valueOf() 计算从1到n的累加和

2,184 阅读1分钟

乍看这道题目,我的反应是使用递归解决,但是当我尝试写的时候,会发现似乎有点无从下手,其实这道题很简单

法一

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

参考:theanubhav.com/2019/02/03/…