可以以允许"传播"的方式编写函数。的调用
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
这种模式的名称是什么?
答案 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;
}
}