对javascript超时感到困惑吗
我有这样一个函数:对javascript超时感到困惑吗,javascript,settimeout,Javascript,Settimeout,我有这样一个函数: var a = function () { setTimeout(function () { alert(2); }, 0); alert(1); } a(); 结果是先警报1,然后警报2 但是我认为,虽然警报(2)在设置超时中,但是它会立即执行,因为延迟是0 为什么要先执行警报(1)?如果不想立即执行,只需删除setTimeout,您将首先收到警报(1),因为setTimeout有一个最小值,请参阅。因此,当您将其设置为0时,它将
var a = function () {
setTimeout(function () {
alert(2);
}, 0);
alert(1);
}
a();
结果是先警报1
,然后警报2
但是我认为,虽然警报(2)
在设置超时中,但是它会立即执行,因为延迟是0
为什么要先执行警报(1)
?如果不想立即执行,只需删除setTimeout,您将首先收到警报(1)
,因为setTimeout有一个最小值,请参阅。因此,当您将其设置为0时,它将使用取决于浏览器的最小值。setTimeout
有一个默认延迟,将导致它在执行了警报(1)
之后执行。如其他人所述,setTimeout()的最小超时为4ms
但更重要的是,即使它有一个0毫秒的实时超时,它也不会先开火。这是因为Javascript是单线程的(不考虑web工作者)
警报(2)
最后触发,因为在setTimeout()中设置的任何内容都只会在当前Javascript执行完成后触发。换句话说:setTimeout()操作放在执行堆栈的末尾
因此,当前函数的执行将首先完成(运行警报(1)
),然后才执行警报(2)
这也是setTimeout
仅保证其内的代码在指定时间后执行,而不是在准确的时间执行的原因
请参阅,了解详细概述。请参阅Daniel Vandersluis的回答setTimeout
有一个最小默认延迟,您不能这样做0您应该阅读以下内容:@TamilVendhan是的,这是一个很好的参考。我在回答中也提到了这一点。请落选的选民撤销他的投票?或者指定答案有什么问题?因为我很确定它是100%正确的。