2016-07-06 61 views
1

我有这个功能需要能够接受多组输入并返回每个输入的总和。例如:Javascript:如何使用多组输入返回函数的总和

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] 

我想不出如何返回最后一次输入后的总和。有没有一种方法可以检查代码是否到达最后一个输入集?因此,我可以运行'返回总和'而不是'返回f'。

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

回答

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));

+0

我想到了这一点,但我正在寻找函数来返回一个值,而不仅仅是将其记录到控制台。 – davidhu2000

+0

函数*是*返回一个值。她只是将该返回的值记录到控制台。 –

+0

如果用'valueOf'代替'toString',则不会有区别。你可以写'var myVar = magicFunction(2)(3)(4)+ 11;'并获得'20'。否则,你需要添加零来明确得到最终结果。我不知道有什么方法可以用JavaScript中问题中的原始语法来实现。 – Xufox

2

你可以改变你函数f

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

,然后调用带有空参数的magicFunction在最后: magicFunction(1)(4)(7 )();