【问题标题】:what causes the difference between code and fnc in setTimeout是什么导致 setTimeout 中 code 和 fnc 之间的差异
【发布时间】:2016-07-31 11:43:51
【问题描述】:

根据 MDN

var timeoutID = window.setTimeout(func, [delay, param1, param2, ...]);
var timeoutID = window.setTimeout(code, [delay]);

如你所见:

 setTimeout(function() {
            alert(2);
        }, 0);
        alert(1);

结果首先是“1”,然后是“2”。

   setTimeout(alert(2), 0);
   alert(1);

但是,结果首先是“2”,然后是“1”。

造成这种差异的原因是什么?

【问题讨论】:

  • 在第二种情况下,alert 立即执行,并且没有设置超时。
  • JS 正在解析alert(2),因为它可能会返回一个您打算超时的函数。第一个是合法超时,它将在当前执行队列之后运行。
  • 顺便说一句,您还可以尝试另一种选择:setTimeout("alert(2)", 0);
  • “代码”表示代码字符串,即"alert(2)"。您传递的只是立即调用alert 的结果。
  • 你的意思是只要代码不是代码串,不管`延迟`,都会先执行

标签: javascript settimeout


【解决方案1】:

如果是

setTimeout(alert(2), 0);
alert(1);

首先执行alert(2),并将其返回值(即undefined)传递给setTimeout函数,而在第一个示例中,函数被传递给setTimeout函数。

也可以看看:Why is setTimeout(fn, 0) sometimes useful?

【讨论】:

    猜你喜欢
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 2016-01-24
    相关资源
    最近更新 更多