setInterval 的最大延迟是多少?

新手上路,请多包涵

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

 setInterval(function () { console.log('test') }, 300000000000)

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

原文由 Nogwater 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 498
2 个回答

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

原文由 Pointy 发布,翻译遵循 CC BY-SA 3.0 许可协议

间隔存储在带符号的 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 天,所以对于任何合理的事情来说绰绰有余。

原文由 Aaron Dufour 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题