是否可以阻止無限循環運行?如何退出JavaScript中的無限循環?
現在我做這樣的事情:
var run = true;
loop ({
if(run) {
whatever
}
}, 30),
然後,當我想阻止它,我改變run
到false
,並true
當我想再次啓動它。
但是循環總是運行,無論我做什麼。它只是不執行裏面的代碼。
有沒有辦法讓它完全停止?並在我想要時重新開始?
是否可以阻止無限循環運行?如何退出JavaScript中的無限循環?
現在我做這樣的事情:
var run = true;
loop ({
if(run) {
whatever
}
}, 30),
然後,當我想阻止它,我改變run
到false
,並true
當我想再次啓動它。
但是循環總是運行,無論我做什麼。它只是不執行裏面的代碼。
有沒有辦法讓它完全停止?並在我想要時重新開始?
SetInterval會給你一個循環,你可以取消。
setInterval ("doSomething()", 5000);
function doSomething ()
{
// (do something here)
}
時間間隔設置爲一個很小的值和我們可以使用clearInterval來取消它
+1,該死的,你打敗了我。 – kzh
如果我正確理解你的問題,你需要的是break
關鍵字。 Here就是一個例子。
function infiniteLoop() {
run=true;
while(run==true) {
//Do stuff
if(change_happened) {
run=false;
}
}
}
infiniteLoop();
它可能不是你在尋找什麼,但你可以嘗試setInterval
。
var intervalId = setInterval(myFunc,0);
function myFun() {
if(condition) {
clearInverval(intervalId);
}
...
}
setInterval也不會阻塞頁面。清除間隔,如clearInterval
所示。
使用while循環
while(run){
//loop guts
}
當run
是假的循環退出。把它放在一個函數中,當你想再次開始循環時調用它。
問題是,JavaScript只有一個線程運行。這意味着,當你無限循環時,沒有其他事情可以發生。因此,你的變量不可能改變。
對此的一個解決方案是使用setTimeout
以非常短的時間傳遞給它。例如:
function doStuff(){
if(someFlag){
// do something
}
setTimeout(doStuff,1);
}
doStuff();
這將使其他操作有可能使用該線程並可能更改標誌。
我不明白你的代碼,你可以發佈實際的嗎?循環是一個函數嗎? – bfavaretto
@ Liso22,你的意思是什麼?你可以用'break','setTimeout'和'clearInterval'用'setInterval'退出'for'和'while'。 – c69
我使用'setInterval' – lisovaccaro