2013-03-30 37 views
1

这个循环不是一种常见的疾病,但什么是它的滥用?如何打破,而外面

var t = true; 

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

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

另一个条件,它会导致无限循环太:

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

第一vertion并不保证下,工作。由于JavaScript定时器不保证。但第二个应该工作。在纠正您的拼写错误后,您遇到的问题与我之前提到的同行相似 – 2013-03-30 07:22:52

+0

这不常见,因为它会冻结浏览器。 – RobG

+0

@silentboy 他们不工作,都冻结浏览器。 我想知道为什么'while'不会中断window.t = false? – Sho

回答

3

JavaScript是单线程; setTimeout当您阻止主事件循环时,将不会调用回调(while (t) { ... })。

如果你正在运行在浏览器的代码,你不能真正做到这件事,但是写在其他的方式你的代码什么;

而是阻塞主事件循环,可以使用Promises Pattern

如果你正在运行在类似node您可以使用本机模块的代码,使您能够创建线程(如threads_a_gogo

+0

明白了,谢谢〜 – Sho

0

可以使用与休息状态的标签就像 外:而(){ // 代码 如果() 休息外; }

2

由于while循环不退出,当事情是同步完成的其它代码永远不会运行。我最好的提议是不使用while循环,而是使用setTimeout等周期性事件,并在完成时使超时运行。 这样你就不会创建一个封闭的环境。

1

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

There 可能是一种在html5中使用新的Web Workers功能执行此类操作的方法,但截至目前,我无法确定。