如何让这个javascript函数调用自己?

时间:2016-03-28 22:40:36

标签: javascript recursion

截至目前,我的sum函数看起来像下面的代码。它工作并返回连续调用的总和。但是如何在没有空括号的情况下完成这项工作呢?像theSum(5)(4)(3)那样返回12。

function theSum(x) {
    var total = x;

    function rec(y) {
        if (y === undefined) return total;
        total += y;
        return rec;
    };

    return rec;
}

console.log(theSum(5)(4)(3)()); // 12

3 个答案:

答案 0 :(得分:1)

这是不可能的。函数不能返回函数和整数。您可以theSum(5, 4, 3) = 12theSum([5, 4, 3]) = 12

答案 1 :(得分:1)

这是一个使用toString方法的建议:

function theSum(x) {
    var total = x;

    function rec(y) {
        total += y;
        return rec;
    };

    rec.toString = function() { return total; }

    return rec;
}

alert(theSum(5)(4)(3));

console.log(parseInt(theSum(5)(4)(3)));

但是请注意,您需要以某种方式将返回的引用转换为字符串,以便您看到结果。

答案 2 :(得分:0)

闭包和JavaScript鸭子打字救援:

function NumSumFun(initial){
    function NumSumNext(num) {
          initial+= num;
      return NumSumNext;
    }
    NumSumNext.valueOf = function () { return initial; }
    return NumSumNext;
}

var x = NumSumFun(10)(29); // ==> function 39
x + 1; // ==> 40

所以发生了什么事。它返回一个函数,但函数有一个valueOf属性,可以访问累计值,因此当用作数字时,函数就作为一个数字。