javascript - 当条件变量(全局变量)在 javascript 中发生变化时停止循环

标签 javascript loops for-loop while-loop

我有一个我无法解决的问题。我在 javascript 中有一个循环,其中要停止的条件变量取决于全局变量。循环开始循环,当我更改该全局变量的值时,它永远不会停止。

stop = false;
var i = 0;
while ((stop == false) && (i<100000)){
    console.log("hi-"+i);
    i++;
}

当循环运行时,如果我做 stop = true,它永远不会停止。我不知道为什么会这样。

有什么想法吗?

谢谢!

最佳答案

JavaScript 本质上是单线程的。一旦一段代码开始运行,它将在其他任何事情发生之前运行完成。 IE 将 stop 设置为 true 的事件在 while 循环完成后才会执行。

您需要将循环分成多个部分并单独运行每个部分,以允许其他事件发生:

stop = false;
var i = 0;

function loopLogic() {
  var tempStop = i + 500;
  while (i < tempStop) {
    //original processing logic
    console.log("hi-" + i);
    i++;
  }

  if (!stop && i < 100000)
    window.setTimeout(loopLogic, 0);

}
window.setTimeout(loopLogic, 0);

这会将函数一次分解为多个 500 个 block 。持续时间为 0 的 setTimeout 让函数(几乎)立即继续,但会将下一个 block 放在执行链的底部。这允许其他事件发生,因此将允许将 stop 更新为 true

Here's a fiddle显示这种方法。

兼容浏览器中可用的另一种方法是 Web Worker ,但这开始超出了这个问题的范围。

关于javascript - 当条件变量(全局变量)在 javascript 中发生变化时停止循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26301252/

相关文章:

javascript - Jquery 在 ul 中选择具有跨度的 div

javascript - 使用 Polymer 元素渲染到通用 Canvas

mysql - 如何使用MySQL中的列值为表中的每条记录生成多条记录?

java - do while 循环中正确循环的问题 - Java

c - 在循环中创建的变量在 C 中的迭代期间更改值

java - 当值超过给定数字时,如何使用 while 或 for 循环进行计数?

javascript - 从 URL 替换正斜杠后的所有内容

javascript - 使用 javascript 在外部站点上按下按钮

matlab - 在 Matlab 上循环使用不同的图像

python - 根据重复值将字典列表合并为较小的字典列表