为什么 JavaScript 中 setTimeout 会立即执行?

问题描述 投票:0回答:1

我在 JavaScript 中使用 setTimeout 函数时遇到了奇怪的行为。我预计 setTimeout 调用会在各自的持续时间后记录消息,但我观察到运行脚本后立即记录了“30 天”的消息。这是我使用的代码:

setTimeout(() => {
    console.log("1 day");
}, 86400000); // 1 day in milliseconds

setTimeout(() => {
    console.log("10 days");
}, 864000000); // 10 days in milliseconds

setTimeout(() => {
    console.log("100 days");
}, 86400000000); // 100 days in milliseconds

setTimeout(() => {
    console.log("30 days");
}, 3456000000); // 30 days in milliseconds

运行脚本后,我看到立即记录输出“30 天”,而其他消息尚未记录。

为什么超时设置为 30 天后立即记录“30 天”?

我将不胜感激有关此行为的任何见解或解释。谢谢!

javascript settimeout
1个回答
-1
投票

在 30 天的时间里,值 3456000000(毫秒)超出了 32 位有符号整数限制。发生这种情况时,该值会回绕,并且解释的超时值实际上变得无效或接近 0,从而导致立即执行。

const targetTime = Date.now() + delayInMilliseconds;
    const interval = setInterval(() => {
        if (Date.now() >= targetTime) {
            clearInterval(interval);
            console.log("Time's up!");
        }

}, 1000);

您可以这样做以跟踪目标时间

© www.soinside.com 2019 - 2024. All rights reserved.