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

我何时使用括号,何时不使用括号?

我何时使用括号,何时不使用括号?

慕妹3146593 2019-08-28 15:02:33
我何时使用括号,何时不使用括号?我怎么能说:var myFunction = function() {    setTimeout(myFunction, 1000);}myFunction();为什么函数调用setTimeout不需要括号,但最后一行呢?
查看完整描述

3 回答

?
慕码人8056858

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

myFunction 是一个功能

myFunction() 调用函数并生成函数返回的任何值。

setTimeout的目的是在经过一段时间后运行代码。你需要把它传递给setTimeout的,将执行之前刚刚函数传递给它(这样的setTimeout本身可以调用函数在适当的时候),因为如果你调用的函数(用括号)现在,而不是1秒后,。


查看完整回答
反对 回复 2019-08-28
?
慕侠2389804

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

setTimeout功能需要一个函数引用*作为参数:引用变量,并且没有括号。

函数调用需要括号(即使函数不带参数)。

Nutshell: myFunction是对函数的引用。myFunction()执行函数,并在表达式中,将“等于”函数的返回值(或者undefined如果没有返回任何内容)。

深入研究:有些情况setTimeout(myFunction(), 1000)可能有意义,比如它myFunction()本身是否会返回一个函数。例如:

var myFunction = function() {
    return function() {
        alert("ohai");
    };};
  • 匿名函数(包含单个return语句)立即执行。

  • 该函数的返回值本身就是一个包含的函数alert

所以:

  • myFunction alone是对函数的引用(恰好返回函数)。

  • myFunction()将执行。它评估为适合的函数引用setTimeout()

最后:

setTimeout(myFunction(), 1000);

这会myFunction()在一秒钟内调用返回值。一秒钟之后,弹出警报。

*或者要评估的字符串,但首选参考。


查看完整回答
反对 回复 2019-08-28
?
喵喔喔

TA贡献1735条经验 获得超5个赞

当你使用括号时,它会说'现在调用这个函数'。所以如果你说setTimeout(myFunction(),1000);,它将使用函数的返回值作为超时的回调。如果函数的返回值本身不是函数,则会出现错误,因为它会尝试执行超时后不可执行的内容(字符串,数字,未定义等)。


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 428 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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