如何在javascript中生成一个通用函数来计算各种形式的和:和(a)(b)(c)。。。。(s)
我遇到了这个问题:我想用javascript编写一个名为如何在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
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
是您能得到的最佳答案。如果问题对您有帮助,请将其标记为已接受:)这基本上是我的代码。你加了什么?!解释它是如何工作的以及为什么您需要最后一次呼叫时使用空括号:)请将我的回答标记为已接受,如果它对您有帮助:)