Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中生成一个通用函数来计算各种形式的和:和(a)(b)(c)。。。。(s)_Javascript_Function - Fatal编程技术网

如何在javascript中生成一个通用函数来计算各种形式的和:和(a)(b)(c)。。。。(s)

如何在javascript中生成一个通用函数来计算各种形式的和:和(a)(b)(c)。。。。(s),javascript,function,Javascript,Function,我遇到了这个问题:我想用javascript编写一个名为sum的函数,对后续参数进行如下求和: sum(1)(2)= 3 sum(1)(2)(3) = 6 sum(1)(2)(3)(4) = 10, 等等。我写了这段代码 function sum(a) { let currentSum = a; function f() { if (arguments.length == 1) { currentSum += arguments[arguments.length

我遇到了这个问题:我想用javascript编写一个名为
sum
的函数,对后续参数进行如下求和:

sum(1)(2)= 3
sum(1)(2)(3) = 6 
sum(1)(2)(3)(4) = 10, 
等等。我写了这段代码

function sum(a) {
let currentSum = a;

function f() {
    if (arguments.length == 1) {
        currentSum += arguments[arguments.length - 1];
        return f;
    } else {
        return currentSum;
    }

}

f.valueOf = () => currentSum;
f.toString = () => currentSum;

return f;
}
如果我在调用的末尾加上空括号,这段代码可以正常工作:
sum(1)(2)(3)(=6
。有没有办法修改代码,这样我就可以去掉空括号了


谢谢你的帮助。提前谢谢。

不,不幸的是你不能。当您提供一个数字作为参数时,该函数将发回另一个函数,以便您可以再次运行它。基本上,您的代码需要“知道”何时添加完数字并想要返回数字:

函数和(a){
设currentSum=a;
函数f(){
//在这种情况下,我们在总和上加一个数字
if(arguments.length==1){
currentSum+=参数[arguments.length-1];
返回f;
//在这种情况下,我们将返回总和
}否则{
返回电流和;
}
}
f、 valueOf=()=>currentSum;
f、 toString=()=>currentSum;
返回f;

}
当您在数学上下文中使用函数时,它将自动调用
f.valueOf
,因此如果您执行类似
console.log(0+sum(1)(2)(3))
的操作,它将返回
6
;如果它在字符串上下文中,它将使用
f.toString
(例如
'0'+sum(1)(2)(3)
将返回
'06'
);但是,如果没有特定的上下文,它将默认为一个函数。如果您执行类似于
+sum(1)(2)(3)
的操作,则可以去掉空括号,但这可能是一种糟糕的风格,因为它可能会造成一些难以调试的情况。不可能同时具有数字和函数的值
valueOf
是您能得到的最佳答案。如果问题对您有帮助,请将其标记为已接受:)这基本上是我的代码。你加了什么?!解释它是如何工作的以及为什么您需要最后一次呼叫时使用空括号:)请将我的回答标记为已接受,如果它对您有帮助:)