前言
最近開始重拾JavaScript基礎,會將《JavaScript高級程序設計》這本書的知識點做一個整理,以方便自己在遺忘的時候能夠翻看自己做的筆記,而不用再去翻這本厚厚的書,書的第一章是JavaScript簡介,講的是JS和瀏覽器的發展歷程,在此便不作為整理的內容
一、<script> 元素
作用:script是向HTML頁面中插入JavaScript的主要方法。
屬性:
1. async:可選。立即下載腳本但不妨礙頁面中的其他操作,如下載其他資源或等待加載其他腳本。只對外部腳本文件有效。
2. charset:可選。通過src屬性指定的代碼的字符集。但大多數瀏覽器會忽略它的值,所以一般不用
3. defer:可選。表示腳本可以延遲到文檔完全被解析和顯示之后再執行。只對外部腳本文件有效。
4. anguage:已廢棄。原用于表示編寫代碼使用的腳本語言,大多瀏覽器會忽略該屬性。
5. type:可選。可看成language的替代屬性,編寫代碼使用腳本語言的內容類型(MIME類型),默認值是text/javascript。
6. src:可選。表示包含要執行代碼的外部文件
二、標簽位置
按照傳統的做法,所有的<script>元素都應該放在頁面的<header>中,這種做法的目的是把所有的外部文件(包括CSS和JavaScript文件)的引用都放在相同的地方,但是在文檔中,包含JavaScript文件意味著必須等到全部的JavaScript代碼都被下載、解析和執行完成以后才能開始呈現頁面的內容(瀏覽器遇到<body>標簽時,才開始呈現內容)。對于那些需要很多JavaScript代碼的頁面來說,這無疑會導致瀏覽器在呈現頁面時出現明顯的延遲。而延遲期間,瀏覽器呈現一片空白,所以,為了解決這個問題,現代Web應用程序一般全部把JavaScript引用放在<body>元素中,頁面內容之后。
三、defer和async
區別:defer會使腳本延遲到頁面解析完畢之后再運行,相當于告訴瀏覽器立即下載,但是延遲執行,defer延遲腳本會按順序解析,第一個延遲腳本會先于第二個延遲腳本解析,一般瀏覽器會忽略該屬性,不建議使用。async也是告知瀏覽器立即下載腳本,但async的腳本并不能保證執行的順序,第二個async腳本可能會先于第一個腳本執行,所以使用async要確保腳本間沒有依賴關系。
建議:異步腳本一定會在頁面的load事件前執行,所以異步腳本不要在加載期間修改DOM,但可能會在DOMContentLoaded事件觸發之前或之后執行。
四、外部文件比之嵌入代碼的好處
·可維護性:遍及不同HTML頁面的JavaScript代碼會造成維護問題。
·可緩存:瀏覽器能夠根據具體的設置緩存鏈接的所有外部JavaScript文件,不同頁面使用相同文件,該文件只需下載一次
·適應未來
自己補充一點:可復用性,很多時候不同的HTML代碼會用到相同的JS,將相同的JS寫成公共方法,可以讓不同的頁面進行復用
五、文檔模式
標準模式(嚴格模式):瀏覽器使用W3C的標準解析渲染頁面,也就是瀏覽器運行的最高標準。
混雜模式(兼容模式):瀏覽器按照自己的標準解析頁面,會以比較寬松的方式,向后兼容,防止站點崩潰。
六、<noscript> 元素
早期瀏覽器都面臨這樣一個特殊的問題,當瀏覽器不支持JavaScript時如何讓頁面平穩退化,對這個問題的最終解決方案就是創造一個<noscript> 元素,用以在不支持JavaScript的流連其中顯示替代的內容,這個元素可以包含能夠出現在文檔 <body> 中的HTML元素——<script>元素除外,例如:
<noscript>
? ? ?<p>本頁面需要瀏覽器支持JavaScript</p>
</noscript>
noscript只有在以下情況會顯示出來:
· 瀏覽器不支持腳本
· 瀏覽器支持腳本,但腳本被禁用