将较大的毫秒值传递给时,我遇到了一些意外行为setTimeout()。例如,
setTimeout()
setTimeout(some_callback, Number.MAX_VALUE);
和
setTimeout(some_callback, Infinity);
两者都导致some_callback几乎立即运行,就好像我已经过去了,0而不是因为延迟而占用了大量资源。
some_callback
0
为什么会这样?
这是由于setTimeout使用32位int存储延迟,因此允许的最大值为
2147483647
如果你试试
2147483648
您会遇到问题。
我只能假定这会导致JS Engine中某种形式的内部异常,并导致函数立即触发而不是根本不触发。