如何在javascript中创建一个计算以下形式总和的通用函数:sum(a)(b)(c)..(s)



我遇到了这个问题:我想用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。有没有什么方法可以修改代码,这样我就可以去掉空括号了?

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

不,很遗憾您不能。当您提供一个数字作为参数时,该函数会发回另一个函数,这样您就可以再次运行它。基本上,你的代码需要"知道"你什么时候完成了添加数字并想拿回一个数字:

function sum(a) {
let currentSum = a;
function f() {
// In this case we are adding a number to the sum
if (arguments.length == 1) {
currentSum += arguments[arguments.length - 1];
return f;
// In this case we are returning the sum
} else {
return currentSum;
}
}
f.valueOf = () => currentSum;
f.toString = () => currentSum;
return f;
}

最新更新