我有一个我无法解决的问题。我在 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/