是否可以阻止无限循环运行?如何退出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