JavaScript 中的函数式编程 - add(a)(b)(c)

www*_*ser 5 javascript functional-programming

我试图围绕 js 中的函数式编程。

我理解 add(3)(5) 将是:

function add(x) {
    return function(y) {
        return x + y;
    };
}
Run Code Online (Sandbox Code Playgroud)

我将如何更改此函数,以便 add(3)(5)(7)(8) 返回 23 或 add(1)(2)(3) 返回 6?

Pav*_*ati 2

在不修改 for 的定义的情况下add,您需要将调用链接到addbe (add(add(add(3)(5))(7)))(8)

为了澄清,这个表达式分解为:

add(3) //returns a function that adds 3
add(3)(5) //returns 8

add(add(3)(5)) // returns a function that adds 8
(add(add(3)(5)))(7) // returns 15

add ((add(add(3)(5)))(7)) //returns function that adds 15
(add(add(add(3)(5))(7)))(8) //returns 23
Run Code Online (Sandbox Code Playgroud)

正如 @zerkms 提到的那样进一步分解(并将我们的函数定义分配给变量),我们可以看到链接是如何add工作的:

var add3 = add(3) //returns a function that adds 3
add3(5) //returns 8

var add8 = add(add3(5)) // returns a function that adds 8
add8(7) // returns 15

var add15 = add(add8(7)) //returns function that adds 15
add15(8) //returns 23
Run Code Online (Sandbox Code Playgroud)

通过链接,我们将添加到先前调用的结果中add

这意味着如果add(3)返回一个加 3 的函数,然后在该数字上加 5,那么您可以将该值 8 传递到另一个调用中,以add创建另一个将 8 添加到其参数的函数。