在进行JavaScript挑战时,我遇到了代码add(1)(2)
,该函数带有多个括号。面临的挑战是要建立add
函数链。
add(1)(2)(3); // -> 6
add(1)(2)(3)(4); // -> 10
add(1)(2)(3)(4)(5); // -> 15
此外,我们应该能够存储返回的值并重新使用它们。
var addTwo = add(2);
addTwo; // -> 2
addTwo + 5; // -> 7
addTwo(3); // -> 5
addTwo(3)(5); // -> 10
谢谢。
答案 0 :(得分:1)
function sum(firstArg, opt_argsStack) {
const argsStack = (opt_argsStack || []).concat([firstArg]);
const nextSum = nextArg => sum(nextArg, argsStack);
nextSum.valueOf = () => argsStack.reduce((a, b) => a + b);
return nextSum;
}
console.log(+sum(1));
console.log(+sum(1)(2));
console.log(+sum(1)(2)(3));
console.log(+sum(1)(2)(3)(4));
在这里,我们将所有累积参数的堆栈向下传递给递归调用。在valueOf调用中,堆栈通过减少时间而转换为一个数字。如果我们想将链式总和更改为链式乘法或其他任何方式,这将为我们提供更大的灵活性,我们只是插入了不同的reduce函数。