猿问

用JavaScript封闭-怎么了?

我试图通过关闭进行下一步:


function func(number) {

    var result = number;


    var res = function(num) {

        return result + num;

    };

    return res;

}


var result = func(2)(3)(4)(5)(3);

console.log(result); // 17

我需要接收2 + 3 + 4 + 5 + 3 = 17但我收到一个错误:未捕获的TypeError:数字不是函数


慕工程0101907
浏览 369回答 3
3回答

吃鸡游戏

您必须以某种方式告知信号链的末端,在该处您将要返回结果号而不是其他函数。您可以选择:使它返回固定次数的函数-这是像您一样使用语法的唯一方法,但这很无聊。看看@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) // Functionfunc(2).valueOf() // 2func(2)(3) // Functionfunc(2)(3).valueOf() // 5func(2)(3)(4)(5)(3) // Functionfunc(2)(3)(4)(5)(3)+0 // 17

慕丝7291255

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

相关分类

JavaScript
我要回答