setInterval的最大延迟是多少?

Nog*_*ter 19 javascript setinterval

我使用以下代码在Firefox 15和Chrome 21上遇到问题:

setInterval(function () { console.log('test') }, 300000000000)
Run Code Online (Sandbox Code Playgroud)

在两个浏览器上,该功能立即运行重复非常快.当然,这是一个很大的数字(代表从现在开始大约10年),但我不认为它被视为微小或负数.我没有看到任何文档中允许的最大延迟.有谁知道是否有标准的最大值,或者这只是浏览器有趣吗?

Aar*_*our 23

间隔存储在带符号的32位int中(在测试的实现中:Google Chrome中的V8),因此您看到的行为是间隔溢出为负数的结果(在这种情况下,它的行为就像间隔是0).因此,您可以使用的最大间隔是2**31 - 1.

这就是我如何确定这种情况:

setInterval(function(){console.log("hi");}, Math.pow(2,31));
Run Code Online (Sandbox Code Playgroud)

行为就像间隔一样0.

setInterval(function(){console.log("hi");}, Math.pow(2,31) - 1);
Run Code Online (Sandbox Code Playgroud)

在我愿意等待的时候不开火.

setInterval(function(){console.log("hi");}, Math.pow(2,33) + 1000);
Run Code Online (Sandbox Code Playgroud)

行为就像间隔是1000(一秒).这里,2**33不影响前32位,所以我们得到1000.

最高可能的间隔,2**31-1ms有点害羞25天,所以绰绰有余.


Poi*_*nty 12

我目前找不到任何文档,但如果定时器值必须符合32位有符号整数,我不会感到惊讶.


rek*_*ire 6

我认为最大延迟是 2 31 -1 即 2,147,483,647ms。有符号 32 位整数的最大值(以毫秒为单位)。如果未签名,则为 2 32 -1 = 4,294,967,295。