作用
- 沒有 defer 或 async,瀏覽器會立即加載并執行指定的腳本,“立即”指的是在渲染該 script 標簽之下的文檔元素之前,也就是說不等待后續載入的文檔元素,讀到就加載并執行。
- 有 async,加載和渲染后續文檔元素的過程將和 script.js 的加載與執行并行進行(異步)。
- 有 defer,加載后續文檔元素的過程將和 script.js 的加載并行進行(異步),但 script.js 的執行要在所有元素解析完成之后,DOMContentLoaded 事件觸發之前完成。
Paste_Image.png
(圖片引自http://www.cnblogs.com/tanhehe/p/4236021.html)
區別
- defer:腳本延遲到文檔解析和顯示后執行,有順序
- async:不保證順序
async 腳本在script文件下載完成后會立即執行,并且其執行時間一定在 window的load事件觸發之前。這意味著多個async腳本很可能不會按其在頁面中的出現次序順序執行。與此相對,瀏覽器確保多個 defer 腳本按其在HTML頁面中的出現順序依次執行,且執行時機為DOM解析完成后,document的DOMContentLoaded 事件觸發之前。