3 回答

TA贡献1829条经验 获得超7个赞
您必须以某种方式告知信号链的末端,在该处您将要返回结果号而不是其他函数。您可以选择:
使它返回固定次数的函数-这是像您一样使用语法的唯一方法,但这很无聊。看看@PaulS的答案。您可能使第一次调用(func(n))为多少参数的个数sum是咖喱。
在某些情况下返回结果,例如在不带任何参数的情况下调用该函数(@PaulS的第二个实现)或具有特殊值的情况下(null在@AmoghTalpallikar的答案中)。
在返回值的函数对象上创建一个方法。valueOf()非常适合,因为它将在将函数强制转换为原始值时调用。实际观看:
function func(x) {
function ret(y) {
return func(x+y);
}
ret.valueOf = function() {
return x;
};
return ret;
}
func(2) // Function
func(2).valueOf() // 2
func(2)(3) // Function
func(2)(3).valueOf() // 5
func(2)(3)(4)(5)(3) // Function
func(2)(3)(4)(5)(3)+0 // 17

TA贡献1859条经验 获得超6个赞
好,(2)(3)部分是正确的。调用func(2)将返回you res
,这是一个函数。但是然后,调用(3)将返回您的结果res
,这是一个数字。因此,当您尝试致电(4)时就会出现问题。
对于您要尝试执行的操作,我看不到Javascript如何预测您位于链的末尾,并决定返回数字而不是函数。也许您可以使用对象属性以某种方式返回具有 “结果”属性的函数,但是大多数情况下,我只是好奇您为什么要尝试以这种方式执行操作。显然,对于您的特定示例,最简单的方法就是将数字相加,但是我猜您会在某些方面走得更远。
添加回答
举报