我在面试中能够解决 addNum(4,5) 和 addNum(4)(5),但是如果 addNum(1)(2)...(N) 呢?

I was able to solve addNum(4,5) and addNum(4)(5) in interview, but what if addNum(1)(2)...(N)?

昨天我参加了JavaScript、

的面试

他们问了我一个问题, 写一个程序,

addNum(4,5);
addNum(4)(5);

我写的。如下

 var fn18 = function(){
    var addNum = function(){
        var argLength = arguments.length,
            num = 0;            
        if(argLength > 1){
            for(var x=0;x < argLength; x++){
                num += parseInt(arguments[x],10);
            }

            return num;
        }else if(argLength == 1){
            num = arguments[0];

            var fn = function (param){                  
                var n = num + param;
                return n;
            }   

            return fn;
        }else{
            return 0;
        }
    };

    print("1> addNum(2,4) => "+addNum(2,4)+"\n");   
    print("2> addNum(2)(5) => "+addNum(2)(5)+"\n");
    print("3> addNum() => "+addNum()+"\n");
};

fn18();

以上程序运行良好。 请忽略 "print" 关键字,因为我在 java.

上的 Rhino 库中 运行

所以我的问题是我应该如何解决这个问题

addNum(2)(3)(4).....(N)

我厌倦了递归返回函数,但它打印了整个函数。

我的方法应该是什么?

这个怎么样(省略第一种情况的解决方法,addNum(4,5)):

function addNum(num) {
    var fun = function(num2) {
        fun.sum += num2;
        return fun;
    }
    fun.sum = num;  
    return fun;
}

您可以链接任意多个,并随时调用 .sum 返回的函数并获取当前总和。