这不是常见的情况,但滥用它的原因是什么?
var t = true;
setTimeout(function(){
t=false;
},1000);
while(t){
//loop...
//if t==false, break loop.
}
另一个条件,它也会导致无限循环:
button.onlcick = function(){
t = false;
}
答案 0 :(得分:3)
JavaScript
是单线程的;使用while {({1}})阻止主事件循环时,将不会调用setTimeout
回调。
如果您在浏览器中运行代码,除了以其他方式编写代码之外,您无法真正做任何事情;
您可以使用Promises Pattern
。
如果您使用while (t) { ... }
之类的代码运行代码,则可以使用本机模块,从而可以创建线程(如threads_a_gogo
。)
答案 1 :(得分:2)
因为while循环永不退出,所以当同步完成某些操作时,您的其他代码永远不会运行。我给你的最好的报价是不要使用while循环而是有一个周期性的事件,比如setTimeout,并在完成后让超时运行。 这样您就不会创建一个封闭的环境。
答案 2 :(得分:1)
它不起作用,因为javascript不是多线程的 - 直到你当前的执行线程结束(并且只要你运行你的while循环就不会这样),没有其他代码被执行(没有超时调用)和用户界面被冻结(按钮点击不会响应)。
使用html5中的新Web Workers功能,可能可以做类似的事情,但截至目前我无法确切地说出来。
答案 3 :(得分:0)
您可以使用具有中断条件的标签 外:当() { //码 如果() 打破外面; }