1、建立document物件,開始解析web頁面。解析html元素和他們的文字內容後新增element物件和text節點到文件中。這個階段document.readystate = 『loading』。
2、遇到link外部css,建立執行緒載入,並繼續解析文件。
3、遇到script外部js,並且沒有設定async、defer,瀏覽器載入,並阻塞,等待js載入完成並執行該指令碼,然後繼續解析文件。
4、遇到script外部js,並且設定有async、defer,瀏覽器建立執行緒載入,並繼續解析文件。
對於async屬性的指令碼,指令碼載入完成後立即執行。(非同步禁止使用document.write())
5、遇到img等,先正常解析dom結構,然後瀏覽器非同步載入src,並繼續解析文件。
6、當文件解析完成,document.readystate = 『interactive』。 (document.onreadystatechage)
7、文件解析完成後,所有設定有defer的指令碼會按照順序執行。(注意與async的不同,但同樣禁止使用document.write());
8、document物件觸發 domcontentloaded事件,這也標誌著程式執行從同步指令碼執行階段,轉化為事件驅動階段。
(document.addeventlistener)
9、當所有async的指令碼載入完成並執行後、img等載入完成後,document.readystate = 『complete』,window物件觸發load事件。
10、從此,以非同步響應方式處理使用者輸入、網路事件等。
JS執行機制
js是單執行緒的,settimeout和setinterval是非同步任務,要掛起,不先執行,等同步任務完成之後,再去處理非同步任務 console.log 1 settimeout function 0 console.log 3 console.log 4 輸出 1 3 4 2console.l...
JS執行機制
輸出結果為 1,2,3 js是從上到下執行的 js是單執行緒的,即在同一時間只能做一件事情 遇到同步程式,直接執行 遇到非同步程式,先掛起,等同步程式執行完畢後再執行 同步佇列 優先順序最高 非同步佇列 遇到非同步佇列先掛起,等同步佇列執行完後,再選擇執行非同步佇列的某個 settimeout中的時...
JS執行機制
js單執行緒 在同一時間js只能做一件事。為什麼是單執行緒?如果多執行緒,同時操作乙個dom會出問題。非阻塞 event loop 事件迴圈 任務佇列 同步任務佇列要優先於非同步任務佇列處理。非同步任務被分為巨集任務和微任務。常見的非同步任務分類如下 巨集任務 定時器系列,dom事件 ui互動事件 ...