我想创建一个可以模拟 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)
}
我想测试您收到的评论,说这是一个“console.log”问题 - 您遇到的问题是因为您的电脑正在努力处理所有这些日志调用。我将其注释掉,并且仅在循环完成后才进行 console.logged:
let a = Date.now() + 5000;
while(Date.now() < a) {
// console.log(1);
}
console.log('done');
看起来效果很好,5 秒后记录“完成”。