此函数调用样式的名称

时间:2015-11-13 16:21:18

标签: functional-programming

可以以允许"传播"的方式编写函数。的调用

console.assert(add(1,2,3,4) === 10, '1+2+3+4 should be 10');
console.assert(add(1,2)(3)(4)() === 10, '1+2+3+4 should be 10'); // "spread" invocation

这种模式的名称是什么?

1 个答案:

答案 0 :(得分:1)

它被称为currying

想象一下add是一个接收4个参数的函数:

function add(a,b,c,d);

如果你传递了4个参数,它将返回所有参数的总和。

如果你传递3,(例如a = 1,b = 2,c = 3),它将返回一个接收一个参数的函数,并将其加到1 + 2 + 3(a,b,c的值)

如果你传递2,它将返回一个接收两个参数的函数,并返回你传递的初始2个参数的总和。

一个例子,如果你像我一样,拥有必要的语言背景。

function add(a, b, c, d){
    if(arguments.length < 1){
        return add
    } else if(arguments.length < 2){
        return function(b, c, d) { return add(a,b,c,d) }
    } else if(arguments.length < 3){
        return function(c, d) { return add(a,b,c,d) }
    } else if(arguments.length < 4){
        return function(d) { return add(a,b,c,d) }
    } else {
        return a+b+c+d; 
    }
}