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

请问js返回的值加不加括号的区别

请问js返回的值加不加括号的区别

皈依舞 2019-02-20 17:13:37
function f1(){    var n=999;    function f2(){      alert(n);     }    return f2;  }  var result=f1();  result(); // 999请问这个代码中, 为什么return f2为什么不加() , 我试了一下,加() 最后会提示result未定义而报错。小白问一下这里面有什么讲究么? 返回f2和返回f2()有啥区别。
查看完整描述

1 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

先回答:

  • 函数名返回的是函数体

  • 函数名加括号返回的是调用这个函数产生的返回值

所以当你不加括号的时候。f1返回f2的函数体就是

function f2(n){
    alert(n)
}

这个东西。
然后下面的代码var result = f1()就相当于把这个函数的执行结果(也就是这个函数的返回值return)给了result(即f2的函数体),这时候result是个函数名。然后在函数名后面加括号调用函数就会去执行函数,所以result()其实也就是执行了上面那个函数里面的代码。

如果你加了括号,f1 return的是f2(),也就是f2的返回值,因为f2函数体里面没有写return,所以它返回的是undefined。所以result === undefined,不是一个函数。所以对return()对它调用会报错。

你可以理解为加括号就是把函数名代表的函数体执行一遍。

不加括号就代表的是函数体。


查看完整回答
反对 回复 2019-02-25
  • 1 回答
  • 0 关注
  • 638 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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