我在Firefox 15和Chrome 21上遇到了问题,代码如下:
setInterval(function () { console.log('test') }, 300000000000)
在两种浏览器上,函数都是立即运行的,重复非常快。当然,这是一个很大的数字(代表大约10年后),但我不希望它被视为一个小数字或负数。我在任何文档中都没有看到允许的最大延迟。有没有人知道是否有一个标准的最大值,或者这只是浏览器的滑稽?
发布于 2012-09-28 12:14:40
目前我找不到任何文档,但如果计时器值必须适合32位有符号整数,我也不会感到惊讶。
发布于 2012-09-28 12:25:04
间隔存储在带符号的32位整数中(在测试的实现中: 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天,因此对于任何合理的事情来说都绰绰有余。
发布于 2022-01-25 13:42:48
将延迟参数转换为带符号的32位整数。这有效地将延迟限制在2147483647毫秒,因为它在IDL中被指定为有符号整数。
它在documentation中提到过
https://stackoverflow.com/questions/12633405
复制相似问题