答案 0 :(得分:2)
对此有评论,你应该仔细阅读这篇文章。
Info
The smallest setTimeout timeout value allowed by the HTML5 specification is 4 ms. Smaller
values should clamp to 4 ms.
Therefore, the first two tests below should have about the same result.
P.S. Some browsers freak out when you use a value greater than 599147937791 for the
timeout (i.e. they use 0 or 4 ms instead), hence the last test.
基本上,Javascript对0
和599147937792
进行了内部处理,因为它们有资格获得setTimeout
的上/下溢值,并且它们四舍五入为默认的最小接受值4
女士。这可能是因为要求0
ms延迟是不合理的,因为甚至可能需要更长的时间来处理函数并确定这是用户想要的。较大值的错误可能是由于计算机限制了您可以表示的数字的大小。
要理解为什么在4
之后大小值返回的原因是内部处理也需要时间,这是一个非常小的数量,但是时间。考虑以下两个时间表:
时间表1
setTimeout(...,0)
被称为if (time < 4) {// use 4}
)0 -> 4
。4
ms 时间表2
setTimeout(...,4)
被称为if (time < 4) {// use 4}
)4
ms 在第一种情况下,两个时间轴中的步骤3需要更长的时间,因为有更改值的额外步骤。两者都会等待相同的时间,但第二个将会更快地开始计时。这与599147937792
大致相同,除了检查将是上限。
短语"freaks out"
让我觉得它看起来更像是
try {
// try with the given input
} catch (Exception) {
// Ahh I freaked out, just use 4 instead!!!!111!!!
}
答案 1 :(得分:1)
来自MDN:
浏览器(包括Internet Explorer,Chrome,Safari和Firefox)将延迟存储为内部32位有符号整数。当使用大于2147483647的延迟时,这会导致整数溢出,导致超时立即执行。