2

这不是一个常见的情况,但它的滥用是什么?

var t = true;

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

while(t){
    //loop...
    //if t==false, break loop.
}

另一种情况,它也会导致无限循环:

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

4 回答 4

3

因为 while 循环永远不会退出,所以当某些事情同步完成时,您的其他代码永远不会运行。我对您最好的提议是不要使用 while 循环,而是使用诸如 setTimeout 之类的重复事件,并在完成时使超时自行运行。这样你就不会创建一个封闭的环境。

于 2013-03-30T07:21:30.210 回答
3

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.)

于 2013-03-30T07:34:44.053 回答
1

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

可能有一种方法可以使用 html5 中的新 Web Workers 功能来做类似的事情,但截至目前我无法确定。

于 2013-03-30T07:22:11.893 回答
0

您可以使用带有中断条件的标签,例如 outer:while() { //code if() break outer; }

于 2013-03-30T07:19:51.603 回答