JavaScript setTimeout 无法正常工作
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 位有符号整数。这会在使用大于 2,147,483,647 毫秒(约 24.8 天)的延迟时导致整数溢出,导致立即执行超时。
根据文档,setTimeOut 函数最多支持 24.8 天 [MDN Ref],等于 2147483647
因此,当您执行 2147483648 时,您基本上得到的是 (2147483648 - 2147483647 = 1)
但是,当您根据纪元时间转换器使用 52147483648 时,这只是未来的 17 天,少于 24.8 天,因此它不会转换它
我最近读到 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 位有符号整数。这会在使用大于 2,147,483,647 毫秒(约 24.8 天)的延迟时导致整数溢出,导致立即执行超时。
根据文档,setTimeOut 函数最多支持 24.8 天 [MDN Ref],等于 2147483647
因此,当您执行 2147483648 时,您基本上得到的是 (2147483648 - 2147483647 = 1)
但是,当您根据纪元时间转换器使用 52147483648 时,这只是未来的 17 天,少于 24.8 天,因此它不会转换它