window.setInterval是否有最大延迟限制

tom*_*umb 14 javascript setinterval

今天我遇到了window.setInterval的一个有趣问题.当使用足够大的延迟(在这种情况下是30天内的毫秒数)时,它每秒执行一次而不是每30天执行一次.在最新的Chrome和Firefox中测试过.

jsFiddle链接

window.setInterval(function() {
    document.getElementById("first").innerHTML = new Date().toString();
}, 5000);
window.setInterval(function() {
    document.getElementById("second").innerHTML = new Date().toString();
}, 2592000000);
Run Code Online (Sandbox Code Playgroud)

我在setInterval中找不到关于延迟最大值的任何权威文档,MDN文档没有提到任何内容.其他在线资料表明,延迟应该能够容纳任何带符号的32位整数.

window.setInterval中的delay参数是否具有最大值,它是什么?

VLA*_*LAZ 9

根据setTimeout公共维基MDN上的文档确实有一个最大值,虽然它似乎不是"官方" - 限制是一个带符号的32位整数.

最大延迟值

包括Internet Explorer,Chrome,Safari和Firefox在内的浏览器将延迟存储为内部的32位有符号整数.当使用大于2147483647的延迟时,这会导致整数溢出,从而导致立即执行超时.

值2592000000确实大于2147483647导致溢出的值.

  • "根据setTimeout文档"---它不是"setTimeout文档",而是一个公共wiki (4认同)
  • @zerkms由于MDN比官方规范更具可读性,因此它通常被认为是一个不错的代理.并且包含这样的实施说明使其更加实用. (2认同)
  • @zerkms只会使它"不是官方文档".但是,它仍然是一个文档,因为(有达到语义饱和的风险)页面_documents_`setTimeout`的行为.谁写了它并不重要,它仍然是关于该功能的一篇文章. (2认同)
  • @Vld我部分同意你的看法.对我来说,它看起来有点误导.(当人们谈到标准时 - 他们需要准确率达到200%) (2认同)