如何退出 JavaScript 中的无限循环?

发布于 2024-12-07 05:24:36 字数 301 浏览 1 评论 0原文

是否有可能完全停止无限循环的运行?

现在我正在做这样的事情:

var run = true;

loop ({
  if(run) {
  whatever
  }
}, 30),

然后,当我想停止它时,我将 run 更改为 false,当我想要时,将其更改为 true重新开始吧。

但无论我做什么,循环总是在运行。它只是不执行里面的代码。

有没有办法完全阻止它?并在我想要的时候让它重新开始?

Is it possible to stop an infinite loop from running at all?

Right now I am doing something like this:

var run = true;

loop ({
  if(run) {
  whatever
  }
}, 30),

Then when I want to stop it I change run to false, and to true when I want to start it again.

But the loop is always running whatever I do. It just not executing the code inside.

Is there a way to stop it completely? and make it start again when I want?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

时光礼记 2024-12-14 05:24:36

如果我正确理解你的问题,你需要的是 break 关键字。 这里是一个示例。

If I am understanding your question correctly, what you need is the break keyword. Here's an example.

情场扛把子 2024-12-14 05:24:36

SetInterval 会给你一个可以取消的循环。

setInterval ( "doSomething()", 5000 );

function doSomething ( )
{
  // (do something here)
}

将间隔设置为一个较小的值并使用clearinterval取消它

SetInterval will give you a loop you can cancel.

setInterval ( "doSomething()", 5000 );

function doSomething ( )
{
  // (do something here)
}

Set the interval to a small value and use clearinterval to cancel it

心如荒岛 2024-12-14 05:24:36
function infiniteLoop() {
    run=true;
    while(run==true) {
        //Do stuff
        if(change_happened) {
            run=false;
        }
    }
}
infiniteLoop();
function infiniteLoop() {
    run=true;
    while(run==true) {
        //Do stuff
        if(change_happened) {
            run=false;
        }
    }
}
infiniteLoop();
清君侧 2024-12-14 05:24:36

它可能不完全是您正在寻找的,但您可以尝试 setInterval

var IntervalId = setInterval(myFunc, 0);

function myFun() {
    if(condition) {
        clearInverval(intervalId);
    }
    ...
}

setInterval 也不会阻塞页面。您可以使用 clearInterval 清除间隔。

It may not be exactly what you are looking for, but you could try setInterval.

var intervalId = setInterval(myFunc, 0);

function myFun() {
    if(condition) {
        clearInverval(intervalId);
    }
    ...
}

setInterval will also not block the page. You clear the interval as shown with clearInterval.

挽清梦 2024-12-14 05:24:36

使用 while 循环

while(run){
    //loop guts
}

run 为 false 时,循环退出。将其放入函数中,并在想要再次开始循环时调用它。

Use a while loop

while(run){
    //loop guts
}

When run is false the loop exits. Put it in a function and call it when you want to begin the loop again.

蓬勃野心 2024-12-14 05:24:36

问题是 javascript 只有一个线程可以运行。这意味着当你无限循环时,不会发生任何其他事情。因此,您的变量不可能改变。

解决此问题的一种方法是使用 setTimeout 进行循环,并传递给它一个非常小的时间。例如:

function doStuff(){
   if(someFlag){
      // do something
   }

   setTimeout(doStuff,1);
}

doStuff();

这将使其他操作有可能利用该线程并可能更改标志。

The problem is that javascript only has a single thread to run on. This means that while you are infinitely looping nothing else can happen. As a result, it's impossible for your variable to ever change.

One solution to this is to use setTimeout to loop with a very small time passed to it. For example:

function doStuff(){
   if(someFlag){
      // do something
   }

   setTimeout(doStuff,1);
}

doStuff();

This will give the possibility for other actions to make use of the thread and potentially change the flag.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文