我在用下面的代码在Firefox 15和Chrome 21问题:setInterval的最大延迟是多少?
setInterval(function() { console.log('test') }, 300000000000)
在这两种浏览器,运行该功能就非常迅速地重复。当然,这是一个很大的数字(代表大约10年后),但我不希望它被视为微小或负数。我没有看到任何文档中允许的最大延迟时间。有谁知道是否有标准的最大值,或者这是否只是浏览器有趣?
我在用下面的代码在Firefox 15和Chrome 21问题:setInterval的最大延迟是多少?
setInterval(function() { console.log('test') }, 300000000000)
在这两种浏览器,运行该功能就非常迅速地重复。当然,这是一个很大的数字(代表大约10年后),但我不希望它被视为微小或负数。我没有看到任何文档中允许的最大延迟时间。有谁知道是否有标准的最大值,或者这是否只是浏览器有趣?
我目前找不到任何文档,但如果计时器值必须符合32位有符号整数,我不会感到惊讶。
这是正确的。 setInterval()失败,值大于32位signed int。 –
该间隔存储在一个带符号的32位int(在Google Chrome浏览器中的测试实现中:V8),因此您看到的行为是间隔溢出到负数的结果(在这种情况下,表现得好像区间为0
)。因此,您可以使用的最大时间间隔是2**31 - 1
。
以下是我确定这是事实:
setInterval(function(){console.log("hi");}, Math.pow(2,31));
行为类似于间隔为0
。
setInterval(function(){console.log("hi");}, Math.pow(2,31) - 1);
在我愿意等待的时候不开火。
setInterval(function(){console.log("hi");}, Math.pow(2,33) + 1000);
行为像间隔是1000
(一秒)。在这里,2**33
不影响前32位,所以我们只得到1000
。
尽可能高的间隔,2**31-1ms
有点害羞25天,所以绰绰有余。
该特定实现*中的间隔*存储在..中,但是显示所用方法的+1。 – 2012-09-28 04:32:29
不错的例子测试。在我对这个问题本身的评论中,我基本上做了同样的工作,但是+1表示你的工作。 :) – Nogwater
Max是2,147,483,647
(2 -1)
要小心,如果你做比数字越大,它会立即运行(你把负值成像,因此浏览器将运行无限环)
setInterval(()=>console.log('n'),2147483647)
31
setInterval(()=>console.log('y'),2147483648)
38
(1588) y
我怀疑数量可强制转换为32位整数沿途某处... – Pointy
@Pointy,这可能是一个很好的猜测。嗯...: -/ – Nogwater
@Pointy。它看起来像2^31-1是安全的,但2^31休息,所以你几乎肯定是正确的。如果你将此作为答案发布,我会给你业力。 – Nogwater