为了账号安全,请及时绑定邮箱和手机立即绑定

用JavaScript封闭-怎么了?

用JavaScript封闭-怎么了?

慕工程0101907 2020-02-03 13:39:20
我试图通过关闭进行下一步: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:数字不是函数
查看完整描述

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


查看完整回答
反对 回复 2020-02-03
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

好,(2)(3)部分是正确的。调用func(2)将返回you res,这是一个函数。但是然后,调用(3)将返回您的结果res,这是一个数字。因此,当您尝试致电(4)时就会出现问题。

对于您要尝试执行的操作,我看不到Javascript如何预测您位于链的末尾,并决定返回数字而不是函数。也许您可以使用对象属性以某种方式返回具有 “结果”属性的函数,但是大多数情况下,我只是好奇您为什么要尝试以这种方式执行操作。显然,对于您的特定示例,最简单的方法就是将数字相加,但是我猜您会在某些方面走得更远。


查看完整回答
反对 回复 2020-02-03
  • 3 回答
  • 0 关注
  • 368 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号