为什么 while 循环中的 setInterval 会变成无限循环(JS)?

Why setInterval inside a while loop become an infinite loop (JS)?

我试图拨打延迟的“一个”电话或“一个或两个?”问题,而是函数 运行 无限期地启动,尽管没有 setInterval 一切正常。

quester2()
function quester2() {
  for (i = 0; i <= finalCount; i++) {
    let K = Math.ceil(Math.random() * 2);
    if (K == 1) {
      setInterval(function () { console.log("one"); }, 1000);
      finalCount += 1;
      allIterations += 1;
      setInterval(function () { console.log("one or two?"); }, 1000);
    } else {
      setInterval(function () { console.log("one or two?"); }, 1000);
      allIterations += 1;
    }
  }
  console.log(finalCount);
  console.log(i);
}

没有无限循环,与之前的 运行 相比,您的代码可能只是随机地进行了更多次迭代。您有时会增加 finalCount,这与 for 循环的条件有关。

看起来像无限循环的是您 运行 相当多的 setIntervals 并且从不清除它们。但是如果你仔细检查你的控制台,你基本上会在调用该函数后立即看到最后两个日志语句的两个输出。一秒钟之后,您开始看到无数个“一个”和“一个或两个?”。

quester2()

0
1
one or two?