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

标签 javascript closures

昨天我参加了一个关于 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 并获取当前总和。

关于javascript - 我在面试中能够解决 addNum(4,5) 和 addNum(4)(5),但是如果 addNum(1)(2)...(N) 呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28316210/

相关文章:

javascript - jqplot meter gauge 问题 : c. jqplot 未定义?

javascript - 使用字符串变量即时创建正则表达式

Javascript:Jquery getJSON 似乎在循环中泄漏内存

swift - 从 Cocoa 中的 C api 调用 Swift 闭包时出现访问错误

ios - Swift - 字典崩溃中的关闭

Swift - 使函数类型显式(在协议(protocol)中)

javascript - "Dock"onClick() 事件中一个 div 元素在另一个之上

javascript - 如何删除 Pixi 中的按钮?

html - 带有 ID 属性的结束标记

循环内的 JavaScript 闭包——简单实用的例子