2. <script>元素的六個屬性
- async:表示應(yīng)該立即下載腳本,但是不影響其他腳本的下載。只對外部腳本有效。
- defer:表示腳本可以延遲到文檔完全解析和顯示之后再執(zhí)行。只對外部腳本有效。
- charset:表示通過src屬性指定代碼的字符集。少用。
- type:可以看成language的替代屬性。默認(rèn)值為"text/javascript"。
- src:文件地址。
- language:已廢棄。
2.1 使用誤區(qū)
2.1.1 script代碼內(nèi)不可以出現(xiàn)"</script>"字符串
解決方法:使用轉(zhuǎn)義符號"\"
例:alert("<\/script>");
2.1.2 不能省略結(jié)束標(biāo)簽
不管是引入外部js文件還是寫js代碼,不能省略"</script>"結(jié)束標(biāo)簽。
2.1.3 引入外部js文件的標(biāo)簽內(nèi)不能嵌入js代碼
在引入外部js文件的標(biāo)簽內(nèi)不能嵌入js代碼,嵌入代碼無效。
2.2 延遲腳本defer
???? 腳本會被延遲到整個頁面都解析完畢后再運(yùn)行,相當(dāng)于告訴瀏覽器立即下載,但延遲執(zhí)行。
???? HTML5 規(guī)范要求腳本按照它們出現(xiàn)的先后順序執(zhí)行,因此第一個延遲腳本會先于第二個延遲腳本執(zhí)行,而這兩個腳本會先于 DOMContentLoaded 事件執(zhí)行。在現(xiàn)實當(dāng)中,延遲腳本并不一定會按照順序執(zhí)行,也不一定會在 DOMContentLoaded 事件觸發(fā)前執(zhí)行,因此最好只包含一個延遲腳本。
2.3 異步腳本async
???? 告訴瀏覽器立即下載文件,標(biāo)記為"asnyc"不一定會按照先后順序執(zhí)行。建議異步腳本不要在加載期間修改DOM。
2.4 標(biāo)簽的位置
???? 放在"<head>"和"<body>"中?,F(xiàn)代Web應(yīng)用程序一般都把JavaScript引用放在"<body>"元素中頁面內(nèi)容的后面。
2.5 文檔模式
???? 混雜模式和標(biāo)準(zhǔn)模式。一般用標(biāo)準(zhǔn)模式。
2.6 <noscript>元素
???? 顯示條件:
- 瀏覽器不支持腳本
- 瀏覽器支持腳本,但腳本被禁用
例:
<noscript>
<p>本頁面需要瀏覽器支持(啟用)JavaScript。</p>
</noscript>
2.7小結(jié)
- 引入外部文件時,src屬性設(shè)置相應(yīng)的URL,既可以是同一服務(wù)器上的文件也可以是不同域的文件。
- 在不使用defer和async屬性的條件下,"<script>"元素會按照出現(xiàn)的先后順序進(jìn)行解析。
- 由于瀏覽器會先解析完不使用 defer 屬性的<script>元素中的代碼,然后再解析后面的內(nèi)容,所以一般應(yīng)該把<script>元素放在頁面最后,即主要內(nèi)容后面,</body>標(biāo)簽前面。
- 使用 defer 屬性可以讓腳本在文檔完全呈現(xiàn)之后再執(zhí)行。延遲腳本總是按照指定它們的順序執(zhí)行。
- 使用 async 屬性可以表示當(dāng)前腳本不必等待其他腳本,也不必阻塞文檔呈現(xiàn)。不能保證異步腳本按照它們在頁面中出現(xiàn)的順序執(zhí)行。
- 使用<noscript>元素可以指定在不支持腳本的瀏覽器中顯示的替代內(nèi)容。但在啟用了腳本的情況下,瀏覽器不會顯示<noscript>元素中的任何內(nèi)容。
????關(guān)鍵字:
???????? script、async、defer、src、type、charset、language、text/javascript、noscript
學(xué)習(xí)筆記:JavaScript高級程序設(shè)計