咱們知道打開一個網頁的時候,瀏覽器會首先建立一個窗口,這個窗口就是一個window對象,也是javascript運行所依附的全局環境對象和全局做用域對象。javascript
爲了加載網頁文檔,當期的窗口將爲要打開的網頁建立一個document對象,而後將頁面加載到這個document中,網頁的內容就是在這這個過程當中一邊加載一邊顯示出來,javascript也是伴隨着這個過程,一邊加載一邊執行的。java
進行加載和執行的目的,就是創建文檔對象模型(DOM)主框架,這個文檔框架是由當前文檔窗口的主線程來執行,並依照嚴格的順序執行。瀏覽器
瀏覽器中會有多少線程能夠同時加載網頁內容呢。Web標準有一個限制就是對同一個域名最多隻容許兩個鏈接來讀取內容,大多瀏覽器都遵循這一標準。框架
對於外部js文件的加載,有一種所謂的異步加載js文件技術。其基本原理就是在當前 被加載執行的js代碼中,想document對象動態的一次添加對個<script>標籤來引入要加載的多個js文件。這時瀏覽器在解析和處理動態添加的標籤時,將開啓相應的線程和鏈接去加載這些外部的js文件,這只是實現了異步加載,而非js代碼實現異步執行,(不一樣瀏覽器對這種動態引入的技術執行順序是不一樣的)。異步
當頁面的主框架加載和執行完畢,瀏覽器纔開始執行和=觸發window對象或body對象的onload事件,在極少數的狀況下網頁若是麼有body對象,瀏覽器在網頁記載完畢以後自動建立一個body對象,並將設置成document的body屬性。線程
因爲一個瀏覽器在打開多個網頁的時候,全部的javascript佔用都是同一個線程,咱們在給網頁編寫腳本時,就不能太自私的編寫大量耗時的代碼。你得考慮用戶在打開頁面的同時也有可能瀏覽其餘頁面。對象