【问题标题】:Javascript: How to return sum of function with multiple sets of inputs [duplicate]Javascript:如何返回具有多组输入的函数总和[重复]
【发布时间】:2016-07-06 16:00:04
【问题描述】:

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

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

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

function magicFunction(x) {
  var sum = x;  

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

我的问题是我希望函数返回总和,但这个函数最后会返回 '[Function: f]'。所以目前,该函数执行以下操作:

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

我不知道如何在最后一次输入后返回总和。有没有办法检查代码是否到达最后一个输入集?因此,我可以运行“return sum”,而不是“return f”。

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

【问题讨论】:

    标签: javascript input closures


    【解决方案1】:

    您可以实现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));

    【讨论】:

    • 我想过,但我正在寻找返回值的函数,而不仅仅是将其记录到控制台。
    • 函数正在返回一个值。她只是将返回值记录到控制台。
    • 如果您将 toString 替换为 valueOf,则不会有任何区别。你可以写var myVar = magicFunction(2)(3)(4) + 11; 并得到20。否则,您需要添加零才能​​明确获得最终结果。我不知道有什么方法可以使用 JavaScript 问题中的原始语法来实现这一点。
    • @davidhu2000 你可以简单地做+magicFunction(3)(2)(7)(9) 来获取被调用函数的值。
    【解决方案2】:

    您可以将函数 f 更改为

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

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

    【讨论】:

      猜你喜欢
      • 2017-11-09
      • 2014-12-30
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-24
      相关资源
      最近更新 更多