【问题标题】:Trying to run a loop for exactly one second, but the loop runs infinitely. why?试图运行一个循环恰好一秒钟,但循环无限运行。为什么?
【发布时间】:2022-01-15 17:01:18
【问题描述】:

我在 1 秒后更改 'aa' 的值,但循环继续执行。

let aa = true;

setTimeout(function () {
  aa = false;
}, 1000);

for (; aa; ) {
  console.log('aaa');
}

【问题讨论】:

  • Javascript 在单线程上运行。由于线程正忙于主动运行你的循环,它不能同时调用超时函数。
  • 这里有一个方便的视频来扩展@JoachimIsaksson 的正确答案:youtube.com/watch?v=8aGhZQkoFbQ

标签: javascript settimeout


【解决方案1】:

由于其他人解释的原因,您的方法不起作用。你可以改用这样的东西:

var started = Date.now();
while(Date.now() - started < 1000) {
  console.log("aaa");
};

【讨论】:

    【解决方案2】:

    setTimeoutasynchronous,所以它只会在for 循环的当前代码执行完成后才会执行。在你的情况下,它会变得无限。

    一旦 for 循环开始执行,它将一直停留在调用堆栈中直到完成。既然你没有给出任何条件,它就不会停止

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-12
      • 2021-10-28
      • 2022-10-18
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多