[英]JavaScript setTimeout doesn't work properly
我最近读到setTimeout()
的超时限制是2147483647
。
当我将超时设置为2147483648
时,程序将其更改为1
但在超时设置为52147483648
时不会这样做。
setTimeout(() => console.log(2147483648), 2147483648) // will fire in 1ms setTimeout(() => console.log(52147483648), 52147483648) // will fire in a long time
这里发生了什么?
最大延迟值 包括 Internet Explorer、Chrome、Safari 和 Firefox 在内的浏览器在内部将延迟存储为 32 位签名的 integer。 当使用大于 2,147,483,647 毫秒(约 24.8 天)的延迟时,这会导致 integer 溢出,从而导致立即执行超时。
根据文档,setTimeOut Function 最多支持 24.8 天[MDN Ref]等于 2147483647
因此,当您执行 2147483648 时,您基本上得到的是 (2147483648 - 2147483647 = 1)
但是,当您根据纪元时间转换器使用 52147483648 时,这仅提前 17 天,不到 24.8 天,因此它不会转换它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.