2010-08-03 36 views
2

如果,例如,我有一些jQuery的做這樣簡單的東西:JavaScript執行順序 - 運行this(),然後在this()完成時執行那個()?

$("div").fadeIn('fast'); 
$("div").html('Foo'); 

這將消失在div,並設置它的HTML到「富」,而它仍然衰落,而:

$("div").fadeIn('fast',function(){ 
    $("div").html('Foo'); 
}); 

在div完成淡入之後,只會將html設置爲「Foo」。

JavaScript是如此工作的一般方式嗎?所以,如果我有:

//do something 
var i = 42; 
var foo = i/1; 
//do something else 
var bar = fooBar(); 

它會開始做別的事情,而它仍然在做什麼,還是會耐心等待做一些事來完成它別的東西之前?

+0

你試過了嗎? – Sarfraz 2010-08-03 10:14:50

+0

@Sarfraz我不知道如何確認行爲。即使有某種控制檯日誌,它仍然會按順序登錄。 – bcmcfc 2010-08-03 11:32:01

回答

3

JavaScript一般不會不是就像這樣工作,你會看到jQuery動畫和回調的結果。當您通過setInterval()運行某些內容時,它會在當前線程之外發生,稍後踢出(.fadeIn()是動畫,they're on interval timers)。

所以第二個函數傳遞給.fadeIn()(或任何.animate()功能)是回調,當它完成它執行此操作。儘管在時間間隔和定時器之外,您的腳本將按順序發生。

即使有時間間隔,並以發生定時器,只是沒有當事情應該發生它出現在代碼中,按時間順序的次序他們這樣做(只要他們按時完成,主線程不等待,即使如此,他們'的順序,如果不是準時)。

1

Javascript正在瀏覽器中的一個線程中運行,所以事情將按順序依次運行。超時和回調將等待,如果有任何事情發生,並將運行結束。

唯一的例外是Web Worker Threads,但它們不應該影響UI。

1

JavaScript是單線程的,它一次只能做一件事,通常按順序。 調用時,回調模式僅在運行腳本後面插入一個函數。 當您開始使用觀察者模式(eventListeners)時,它變得更加複雜。