都只能用于外部腳本
defer:
- 告訴瀏覽器立即下載,但延遲執(zhí)行懒棉。script元素包含的腳本延遲到瀏覽器遇到</html>標簽后再執(zhí)行草描。
- HTML5規(guī)范要求按照出現(xiàn)的先后順序執(zhí)行。
- 會先于DOMContentLoaded事件執(zhí)行策严。但在現(xiàn)實當中穗慕,延遲腳本并不一定按照順序執(zhí)行,也不一定會在DOMContentLoaded事件觸發(fā)前執(zhí)行妻导,因此最好只包含一個延遲腳本逛绵。
async:
- 告訴瀏覽器立即下載文件,不保證按先后順序執(zhí)行倔韭。
- 指定async的目的是不讓頁面等待腳本下載和執(zhí)行术浪,從而異步加載其他內(nèi)容。
- 所以寿酌,異步腳本不要在加載期間修改DOM胰苏。異步腳本一定會在頁面load事件前執(zhí)行,但可能會在DOMContentLoaded事件觸發(fā)之前或之后執(zhí)行醇疼。
參考:《JavaScript高級程序設計(第三版)》