2011-09-30 57 views
0

是否可以阻止无限循环运行?如何退出JavaScript中的无限循环?

现在我做这样的事情:

var run = true; 

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

然后,当我想阻止它,我改变runfalse,并true当我想再次启动它。

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

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

+0

我不明白你的代码,你可以发布实际的吗?循环是一个函数吗? – bfavaretto

+0

@ Liso22,你的意思是什么?你可以用'break','setTimeout'和'clearInterval'用'setInterval'退出'for'和'while'。 – c69

+0

我使用'setInterval' – lisovaccaro

回答

1

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

setInterval ("doSomething()", 5000); 

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

时间间隔设置为一个很小的值和我们可以使用clearInterval来取消它

+0

+1,该死的,你打败了我。 – kzh

5

如果我正确理解你的问题,你需要的是break关键字。 Here就是一个例子。

0
function infiniteLoop() { 
    run=true; 
    while(run==true) { 
     //Do stuff 
     if(change_happened) { 
      run=false; 
     } 
    } 
} 
infiniteLoop(); 
0

它可能不是你在寻找什么,但你可以尝试setInterval

var intervalId = setInterval(myFunc,0);

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

setInterval也不会阻塞页面。清除间隔,如clearInterval所示。

0

使用while循环

while(run){ 
    //loop guts 
} 

run是假的循环退出。把它放在一个函数中,当你想再次开始循环时调用它。

0

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

对此的一个解决方案是使用setTimeout以非常短的时间传递给它。例如:

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

    setTimeout(doStuff,1); 
} 

doStuff(); 

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