1.<script>元素
這個元素由Netscape創(chuàng)造并在Netscape Navigator實(shí)現(xiàn)
HTML4.01為<script>定義了下列6個屬性:
async:可選。表示立即下載該腳本,但不妨礙頁面中的其他操作治唤,比如下載其他資源或等待加載其他腳本氓癌。只對外部腳本文件有效睡腿。
charset:可選懊烤。表示通過src屬性指定的代碼的字符集磅崭。由于大多數(shù)瀏覽器會忽略它的值御吞,因?yàn)楹苌儆腥擞谩?defer:可選麦箍。表示腳本可以延遲到文檔完全被解析和顯示之后再執(zhí)行。只對外部腳本文件有效陶珠。IE7及更早版本對嵌入腳本也支持這個屬性挟裂。
src:可選。表示包含要執(zhí)行代碼的外部文件揍诽。
type:可選诀蓉。可以看成是language的替代屬性(表示編碼代碼使用的腳本語言的內(nèi)容類型暑脆,即MIME類型);一般可以不用指定渠啤,默認(rèn)為text/javascript。
使用:1.頁面嵌入javascript代碼/2.包含外部JavaScript文件添吗。
解釋:從上至下沥曹。在解釋器對<script>元素內(nèi)部的所有代碼求值完畢以前,頁面中的其余內(nèi)容不會被瀏覽器加載或顯示碟联。
解析:從上至下妓美,不過受defer和async干擾。
注意:
不要在<script>標(biāo)簽內(nèi)任何地方出現(xiàn)"</script>"字符串鲤孵。想使用壶栋,就要加轉(zhuǎn)義。<\/script>
解析js代碼時普监,頁面的處理會暫時停止
XHTML文檔中贵试,</script>可以省略
外部js文件的.js拓展名不是必需的,所以JSP鹰椒、PHP等可以動態(tài)生成js代碼使用锡移。瀏覽器不強(qiáng)制要js拓展名,但它根據(jù)拓展名決定為響應(yīng)應(yīng)用哪種MIME類型漆际,需要確保服務(wù)器能返回正確的MIME類型淆珊。
1.1 標(biāo)簽的位置
傳統(tǒng)做法:<script>放在<head>元素中。
意味必須等到全部JS代碼下載完成奸汇。缺點(diǎn)是js代碼多會延遲施符。貌似可以一窺前端的變化:js操作越來越多往声,互聯(lián)網(wǎng)發(fā)展速度跟不上js需求,才會延遲戳吝,不然可以老辦法走到頭浩销。
現(xiàn)在:放在<body>尾部。
1.2 延遲腳本
最好只包含一個延遲腳本听哭,因?yàn)楝F(xiàn)實(shí)中可能不按順序慢洋,也不一定在DOMContentLoaded事件觸發(fā)之前執(zhí)行
H5會忽略嵌入腳本內(nèi)的defer
1.3 異步腳本
指定anync屬性的目的是不讓頁面等待腳本下載和執(zhí)行,從而異步加載頁面其他內(nèi)容陆盘。為此普筹,建議異步腳本不要在加載期間修改DOM。
異步腳本一定會在頁面的load事件前執(zhí)行隘马,可能會在DOMContentLoaded事件觸發(fā)之前或之后執(zhí)行太防。
1.4 在XHTML中的用法
略
1.5 不推薦使用的語法
已經(jīng)是歷史問題了,當(dāng)時還有不支持js的瀏覽器
2 嵌入代碼與外部文件
支持外部引入有以下有點(diǎn):
可維護(hù)性:不同頁面js維護(hù)麻煩酸员。
可緩存
適應(yīng)未來:無需使用XHTML和注釋hack
3 文檔模式
略蜒车,這一節(jié)沒提具體的差異
4 <noscript>元素
解決歷史問題的,只有以下情況才會顯示
瀏覽器不支持腳本
瀏覽器支持腳本幔嗦,但腳本被禁用