2011-02-01 65 views
10

說我有以下代碼:用的setTimeout的Javascript執行順序()

function testA { 
    setTimeout('testB()', 1000); 
    doLong(); 
} 

function testB { 
    doSomething(); 
} 

function doLong() { 
    //takes a few seconds to do something 
} 

我執行testA()。我讀過Javascript是單線程的。 1000毫秒後會發生什麼,當達到testB()的超時時間?

我能想到的一些可能性:

  • testB()排隊,doLong()後執行和其他任何叫已經完成。
  • doLong()立即終止並啓動testB()
  • doLong()會在停止前執行一段時間(自動或在提示用戶之後),並且testB()已啓動。
  • doLong()暫停,testB()啓動。 testB()完成後,doLong()恢復。

什麼是正確答案?據我所知,它是依賴於執行還是標準的一部分?*

This question是相似但不相同,據我所知。

爲了更好地理解Javascript執行,您可以推薦任何鏈接,我們將不勝感激。

謝謝!

*是的,我知道,並不是所有的瀏覽器遵循標準:(

回答

10

首先你的猜測是正確的: testB() is queued up to execute after doLong() and anything else it called have finished.

如果時間超過一秒鐘testA完成,testB將簡單地等待。

此外,你應該寫setTimeout(testB, 1000),而不是setTimeout('testB()', 1000)。發送字符串setTimeout的是,喜歡用evalgenerally considered evil會讓你敵人;)

+0

我開始相信`setTimeout(function(){testB(); },1000);`是最好的方法,我誤導了嗎? – 2011-02-01 10:07:51