2011-09-30 65 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(); 

這將使其他操作有可能使用該線程並可能更改標誌。