Javascript:如何使用多组输入返回函数的总和

时间:2016-07-06 16:00:04

标签: javascript input closures

我有这个功能,需要能够接收多组输入并返回每个输入的总和。例如:

magicFunction(1)(2)(3) => 6

我用下面的代码完成了这个。 ' F(y)的'将运行,直到没有输入集。

function magicFunction(x) {
  var sum = x;  

  function f(y) { 
    sum += y;
    return f;
  };  
  return f;
}

我的问题是我希望函数返回总和,但此函数将返回' [功能:f]'在末尾。所以目前,该功能是这样做的:

magicFunction(1)(2)(3) => [Function: f]

我无法弄清楚如何在最后一次输入后返回总和。有没有办法检查代码是否到达最后一个输入集?因此,我可以运行'返回总和'而不是'返回f'。

我考虑添加一个' toString'方法,然后使用' console.log'输出结果。但是我正在寻找函数来返回值,而不仅仅是将值输出到控制台上。

2 个答案:

答案 0 :(得分:4)

您可以实施toString方法或valueOf方法。



function magicFunction(x) {
    var sum = x;  

    function f(y) { 
        sum += y;
        return f;
    }; 
    f.toString = function () { return sum; };      // for expecting string, 1st log
    f.valueOf = function () { return 100 + sum; }; // for expecting numbers, 2nd log

    return f;
}

console.log(magicFunction(2)(3)(4));
console.log(magicFunction(2)(3) + magicFunction(4)(5));




答案 1 :(得分:2)

您可以将功能f更改为

function f(y) { 
    if(!y) {
        return sum;
    }
    sum += y;
    return f;
}

然后,最后用一个空参数调用magicFunction: magicFunction(1)(4)(7)();