【发布时间】: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