使用javaScript闭包来求和(a)(b)= a + b并接受任意数量的括号

时间:2016-06-23 13:00:18

标签: javascript

sum(a)(b)的输出= a + b,例如:

sum(1)(2)= 3

sum(5)( - 1)(2)= 6

总和(6)( - 1)( - 2)( - 3)= 0

目的是接受任意数量的输入参数。

我已经看到了这个问题的正确解决方案。 我的问题是为什么我的方法不起作用。

正确的解决方案:

function sum(a){
    var sum = a
    function f(b){
        sum += b
        return f
    }
    f.toString = function(){return sum}
    return f
}

我的方法:

function add(a){
    function add1(b){
        if(b === undefined){
            console.log(a);
            return;
        }
        else{
            return add(a+b);
        }
    }

    if(a === undefined){
        console.log(a);
        return;
    }
    else{
        return add1;    
    }
}

测试数据:添加(4),添加(4)(2)。 在两个测试用例中,分支" a === undefined"或者" b === undefined"永远不会到达。我对此很困惑。

1 个答案:

答案 0 :(得分:1)

In both test cases, branch "a === undefined" or "b === undefined" will never be reached

那是因为a和b是函数的参数。要使它们未定义,您必须调用函数而不传递参数值或将未定义作为值传递,例如add() add(5)() add(5)(void(0))

如果您在最后添加空(),则您的功能有效,例如add(7)(8)(9)()