gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:14:54 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com