为什么在条件中使用 Date.now() 会创建无限循环?

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

我想创建一个可以模拟 5 秒延迟的循环,但最终创建了一个无限循环。我不明白为什么会这样。

let a = Date.now() + 5000;
while(Date.now() < a) {
    console.log(1);
}

出了什么问题? a 是一个固定值,Date.now() 不应该在每次迭代后更改吗?

我还想知道为什么当循环无限时 setTimeout 仍然有效?不是应该只有在当前执行的脚本完成后才执行吗?既然这个脚本永远不会完成,为什么 setTimeout 仍然被调用?

setTimeout(() => {
    alert(2);
}, 2000);
let a = Date.now() + 5000;
while( Date.now() < a ) {
    console.log(1)
}

javascript loops settimeout infinite-loop
1个回答
0
投票

我想测试您收到的评论,说这是一个“console.log”问题 - 您遇到的问题是因为您的电脑正在努力处理所有这些日志调用。我将其注释掉,并且仅在循环完成后才进行 console.logged:

let a = Date.now() + 5000;
while(Date.now() < a) {
    // console.log(1);
}

console.log('done');

看起来效果很好,5 秒后记录“完成”。

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