? ? ? ?當(dāng)瀏覽器遇到 script 標(biāo)簽時(shí),文檔的解析將停止,并立即下載并執(zhí)行腳本,腳本執(zhí)行完畢后將繼續(xù)解析文檔。
三者之間的區(qū)別?
script
當(dāng)瀏覽器遇到 script 標(biāo)簽時(shí),文檔的解析將停止,并立即下載并執(zhí)行腳本,腳本執(zhí)行完畢后將繼續(xù)解析文檔。defer script
當(dāng)瀏覽器遇到 script 標(biāo)簽時(shí),文檔的解析不會(huì)停止,其他線程將下載腳本,待到文檔解析完成,腳本才會(huì)執(zhí)行。async script
當(dāng)瀏覽器遇到 script 標(biāo)簽時(shí),文檔的解析不會(huì)停止,其他線程將下載腳本,腳本下載完成后開(kāi)始執(zhí)行腳本,腳本執(zhí)行的過(guò)程中文檔將停止解析,直到腳本執(zhí)行完畢。

Paste_Image.png
什么情況下使用 defer 和 async?
- 如果腳本不依賴于任何腳本,并不被任何腳本依賴,那么則使用 defer。
- 如果腳本是模塊化的,不依賴于任何腳本,那么則使用 async。
- 若兩個(gè)屬性同在,會(huì)忽略defer而遵從async。