一尘不染

为什么setTimeout()对于较大的毫秒延迟值会“中断”?

javascript

将较大的毫秒值传递给时,我遇到了一些意外行为setTimeout()。例如,

setTimeout(some_callback, Number.MAX_VALUE);

setTimeout(some_callback, Infinity);

两者都导致some_callback几乎立即运行,就好像我已经过去了,0而不是因为延迟而占用了大量资源。

为什么会这样?


阅读 366

收藏
2020-05-01

共1个答案

一尘不染

这是由于setTimeout使用32位int存储延迟,因此允许的最大值为

2147483647

如果你试试

2147483648

您会遇到问题。

我只能假定这会导致JS Engine中某种形式的内部异常,并导致函数立即触发而不是根本不触发。

2020-05-01