2013-05-13 66 views
1

Here我看到的JavaScript死锁和验证码:JavaScript的僵局

var loop = true, 
block = setTimeout(function(){loop = false}, 1); 
while(loop); 

这绝对是无限循环并导致浏览器冻结。据说deadlock is created when one operation wait another one to be executed and vice-versa
我的问题是,除了那种情况下发生死锁以及避免它们的方式?

+0

'setTimeout'是为了处理这些过时的代码结构,其中一个会浪费一些循环来使其运行速度变慢。计算机甚至有硬件调度程序在硬件级别执行此操作,以便CPU可以睡眠一点点并节省电力。 – Zdenek 2013-05-13 20:13:21

回答

6

这不是一个死锁,只是一个无限循环,你不能在JavaScript中产生死锁,因为你不能有多个线程访问你的数据。

这里发生的事情是,因为你的循环永远不会结束,而且js引擎是单线程的(关于你的脚本),调度器不会调用你给setTimeout的回调。事实上,如果没有第二行,你会有完全相同的行为。