Javascript 如何在外循环时中断

Javascript 如何在外循环时中断,javascript,while-loop,Javascript,While Loop,这不是一种常见的情况,但有什么滥用呢 var t = true; setTimeout(function(){ t=false; },1000); while(t){ //loop... //if t==false, break loop. } 另一种情况是,它也会导致无休止的循环: button.onlcick = function(){ t = false; } 可以使用具有中断条件的标签,如 外:while() { //代码 if() 打破外部; }

这不是一种常见的情况,但有什么滥用呢

var t = true;

setTimeout(function(){
    t=false;
},1000);

while(t){
    //loop...
    //if t==false, break loop.
}
另一种情况是,它也会导致无休止的循环:

button.onlcick = function(){
    t = false;
}

可以使用具有中断条件的标签,如 外:while() { //代码 if() 打破外部;
}因为while循环永远不会退出,所以当同步完成某项操作时,您的其他代码永远不会运行。我给您的最好建议是不要使用while循环,而是使用一个重复事件,例如setTimeout,并在完成时使超时自行运行。
这样,您就不会创建一个封闭的环境。

它不会工作,因为javascript不是多线程的-直到您当前的执行线程结束(并且只要您运行while循环,它就不会工作),没有其他代码被执行(没有超时调用),UI被冻结(按钮单击不会响应)


通过html5中的新Web Workers功能,可能会有类似的方法,但到目前为止,我还不能确定<当您使用while(
while(t){…}
)阻塞主事件循环时,不会调用code>setTimeoutcallback

若你们在浏览器中运行你们的代码,除了用另一种方式编写你们的代码,你们真的什么也做不了

您可以使用


如果您在
节点
中运行代码,您可以使用本机模块,这样您就可以创建线程(如。)

第一个vertion不保证工作。因为javascript定时器是不保证的。但第二种方法应该有效。在纠正您之前提到的编辑问题后,您所面临的问题并不常见,因为它会冻结浏览器。@silentboy如果不起作用,则都会冻结浏览器。我想知道为什么当窗户打开时“while”不坏。t=false?