我遇到了这个问题:我想用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;
}