2012-07-25 51 views
1

有沒有辦法看到JavaScript創建的「線程」?例如,如果我有一個附加到DOM元素的事件處理程序,我認爲JavaScript會隱式地創建一個新線程在後臺運行該代碼?如果是這樣,有沒有辦法看到(例如通過Firebug,WebKit檢查器等)JavaScript已打開的不同「線程」? (如果它不是JavaScript所使用的線程,那麼事件處理程序如何在「幕後」工作?)查看JavaScript正在創建的主題?

+2

JavaScript是單線程的。 – Bergi 2012-07-25 23:46:09

回答

4

JavaScript不會生成線程。底層瀏覽器可能是在它自己的線程環境中處理事件,然後讓JavaScript解釋器運行處理程序,但是JavaScript中沒有線程訪問,瀏覽器的工作方式是特定於實現的。

+0

這意味着JavaScript事件處理程序可以在技術上'阻止'? – user1516425 2012-07-25 23:49:03

+1

@ user1516425:是的。在事件處理程序中執行'while(true);'並在您的頁面凍結時觀看! :) – Ryan 2012-07-25 23:50:34

2

JavaScript不會創建新線程,它會在瀏覽器中運行。你無法真正看到這些信息。你可以使用一個分析器,但我不確定這會回答你的問題

0

JavaScript是「單線程」,所有執行是線性的(儘管我們不知道如何底層引擎的工作原理)。

異步操作是基於事件的(DOM事件,Ajax調用,WebWorkers),因此它們的處理程序的執行被追加到調度程序隊列 - 它們只會在當前執行完成時執行。這就是爲什麼無法從外部阻止無限循環的原因 - 它們只會凍結瀏覽器(並最終拋出異常情況long-running script)。

這與超時(W3 Timer spec)相同,它們在活動定時器列表中添加一個任務。您可以在processing model spec的Web-App API中閱讀有關此類任務隊列的更多信息。