2013-05-13 63 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的回調。事實上,如果沒有第二行,你會有完全相同的行爲。