这不是一个常见的情况,但它的滥用是什么?
var t = true;
setTimeout(function(){
t=false;
},1000);
while(t){
//loop...
//if t==false, break loop.
}
另一种情况,它也会导致无限循环:
button.onlcick = function(){
t = false;
}
这不是一个常见的情况,但它的滥用是什么?
var t = true;
setTimeout(function(){
t=false;
},1000);
while(t){
//loop...
//if t==false, break loop.
}
另一种情况,它也会导致无限循环:
button.onlcick = function(){
t = false;
}
因为 while 循环永远不会退出,所以当某些事情同步完成时,您的其他代码永远不会运行。我对您最好的提议是不要使用 while 循环,而是使用诸如 setTimeout 之类的重复事件,并在完成时使超时自行运行。这样你就不会创建一个封闭的环境。
JavaScript
是单线程的;setTimeout
当您使用 while ( ) 阻塞主事件循环时,不会调用回调while (t) { ... }
。
如果你在浏览器中运行你的代码,除了以其他方式编写代码之外,你真的无能为力;
您可以使用Promises Pattern
.
If you're running your code in something like node
you can use native modules, making you able to create threads (like threads_a_gogo
.)
它不会工作,因为 javascript 不是多线程的 - 直到你当前的执行线程结束(只要你运行你的 while 循环它就不会),没有其他代码被执行(没有超时调用)并且 UI 是冻结(按钮点击不会响应)。
可能有一种方法可以使用 html5 中的新 Web Workers 功能来做类似的事情,但截至目前我无法确定。
您可以使用带有中断条件的标签,例如 outer:while() { //code if() break outer; }