首頁  >  文章  >  web前端  >  JavaScript運行機制之Event Loop

JavaScript運行機制之Event Loop

php中世界最好的语言
php中世界最好的语言原創
2018-03-16 15:30:511439瀏覽

這次帶給大家JavaScript運行機制之Event Loop,使用JavaScript運行機制的注意事項有哪些,下面就是實戰案例,一起來看一下。

主執行緒從"任務佇列"中讀取事件,這個過程是循環不斷的,所以整個的這種運作機制又稱為Event Loop(事件循環)。

為了更好地理解Event Loop,請看下圖

JavaScript運行機制之Event Loop


#上圖中,主執行緒運行的時候,產生堆疊(heap)和堆疊(stack),堆疊中的程式碼呼叫各種外部API,它們在"任務佇列"中加入各種事件(click,load,done)。只要堆疊中的程式碼執行完畢,主執行緒就會去讀取"任務佇列",依序執行那些事件所對應的回呼函數

執行堆疊中的程式碼(同步任務),總是在讀取"任務佇列"(非同步任務)之前執行。請看下面這個例子。

    var req = new XMLHttpRequest();
    req.open('GET', url);    
    req.onload = function (){};    
    req.onerror = function (){};    
    req.send();

上面程式碼中的req.send方法是Ajax操作向伺服器發送數據,它是一個非同步任務,意味著只有當前腳本的所有程式碼執行完,系統才會去讀取"任務佇列" 。所以,它與下面的寫法等價。

    var req = new XMLHttpRequest();
    req.open('GET', url);
    req.send();
    req.onload = function (){};    
    req.onerror = function (){};

也就是說,指定回呼函數的部分(onload和onerror),在send()方法的前面或後面無關緊要,因為它們屬於執行棧的一部分,系統總是執行完它們,才會去讀取"任務隊列"。

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

JavaScript運行機制之任務佇列

#瀏覽器的多執行緒機制詳解

關於js中型別轉換的一些小問題

以上是JavaScript運行機制之Event Loop的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn