繁体   English   中英

调用带有多个括号的函数

[英]Calling a function with multiple parenthesis

在进行一些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

提前致谢。

 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函数。

请参阅: https//medium.com/reflecting-on-bits/fun-fact-sum-of-numbers-through-infinite-currying-in-js-a5c229765a18

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM