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

用setTimeout()调用函数

用setTimeout()调用函数

杨__羊羊 2019-06-03 16:14:37
用setTimeout()调用函数简单地说.。为什么setTimeout('playNote('+currentaudio.id+', '+noteTime+')', delay);很好地工作,在指定的延迟之后调用函数,但是setTimeout(playNote(currentaudio.id,noteTime), delay);同时调用函数playNote?(这些setTimeout()在for循环中)或者,如果我的解释太难理解,这两种功能有什么区别?
查看完整描述

4 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

它可能有助于理解javascript何时执行代码,以及何时等待执行:

let foo2 = function foo(bar=baz()){ console.log(bar); return bar()}

  • javascript执行的第一件事是函数构造函数,并创建一个函数对象。类的函数关键字语法。

    =>

    语法,您将得到类似的(

    但不完全相同

    )结果。
  • 然后将刚刚创建的函数分配给变量。

    foo2

  • 此时,没有运行任何其他函数:没有调用其他函数(两者都没有)。

    baz

    也不

    bar

    ,没有价值观等。但是,在函数中已经检查了语法。
  • 如果你通过

    foo

    foo2

    setTimeout

    然后在超时之后,它将调用该函数,就像您这样做一样。

    foo()

    ..(注意,没有任何arg传递给

    foo

    ..这是因为

    setTimeout

    在默认情况下不会传递参数,

    虽然它可以

    ,但这些参数是在超时到期之前计算的,而不是在超时到期时计算的。)
  • 调用foo后,将计算默认参数。因为我们不传递参数就调用foo,所以默认的

    bar

    被评估。(如果我们通过一个论点,这种情况就不会发生)
  • 的默认参数计算时,

    bar

    ,第一个javascript查找一个名为

    baz

    ..如果它找到了一个函数,那么它就会尝试调用它作为一个函数。如果该方法有效,则将返回值保存到

    bar.

  • 现在评估该职能的主体:
  • JavaScript查找变量

    bar

    然后用结果调用sole e.log。这不叫酒吧。但是,如果它被称为

    bar()

    ,然后

    bar

    的返回值。

    bar()

    会被传递给

    console.log

    相反。注意,javascript获取它正在调用的函数的参数值。

    以前

    它调用该函数,甚至在它查找该函数之前,查看它是否存在,是否确实是一个函数。
  • JavaScript再次查找

    bar

    ,然后尝试将其称为函数。的结果返回值。

    foo()

因此,函数体和默认参数不是立即调用的,但是其他的都是。类似地,如果执行函数调用(即()),则该函数也会立即执行。但是,不需要调用函数。去掉括号将允许您传递该函数并稍后调用它。但是,这样做的缺点是不能指定要调用函数的参数。此外,javascript在函数括号内执行所有操作。以前它调用函数或查找存储在其中的变量。


查看完整回答
反对 回复 2019-06-03
  • 4 回答
  • 0 关注
  • 1567 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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