JavaScript誕生於1995年,它的主要目的是處理之前由服務器端語言負責的一些輸入驗證操做。javascript
完整的JavaScript實現由下列三個不一樣的部分組成:html
核心(ECMAScript)java
文檔對象模型(DOM)瀏覽器
瀏覽器對象模型(BOM)緩存
1.1 ECMAScript服務器
ECMAScript是由EXMA-262定義的,它提供了核心語言功能。異步
Web瀏覽器只是ECMAScript實現可能的宿主環境之一。宿主環境不只提供基本的ECMAScript實現,同時也會提供該語言的擴展,以便語言與環境之間對接交互。async
ECMA-262規定這門語言的下列組成部分:語法、類型、語句、關鍵字、保留字、操做符、對象code
ECMAScript就是對實現該標準規定的各個方面內容的語言的描述。
ECMAScript的不一樣版本又稱爲版次,以第x版表示。目前最新的是ECMAScript 6.0(簡稱:ES6)htm
1.2 文檔對象模型(DOM)
文檔對象模型(DOM,Document Object Model)是針對XML但通過拓展用於HTML的應用程序接口(API,Application Programming Interface)。
DOM把整個頁面映射爲一個多層節點的結構(結構樹)。HTML或XML頁面中的每一個組成部分都是某種類型的節點,這些節點又包含着不一樣類型的數據。
DOM提供訪問和操做網頁內容的方法和接口。
1.3 瀏覽器對象模型(BOM)
瀏覽器對象模型(BOM,Browser Object Model)是指能夠訪問和操做瀏覽器窗口的應用程序接口(API)
BOM提供與瀏覽器交互的方法和接口。
2.1 <script>元素
向HTML頁面中插入JavaScript的主要方法,就是使用<script>元素。
<script>中定義了下列5個屬性:
async:可選,表示應該當即下載腳本,但不該妨礙頁面中的其餘操做。只對外部腳本文件有效
defer:可選,表示腳本能夠延遲到文檔徹底被解析和顯示以後再執行。只對外部腳本文件有效。
charset:可選,表示經過src屬性指定的代碼的字符集,比較少用。
src:可選,表示包含要執行代碼的外部文件
type:可選,表示編寫代碼使用的腳本語言的內容類型(也稱爲MIME類型)。在HTML5中,默認是text/javascript,因此不須要設置。
使用<script>元素嵌入JavaScript代碼,有兩種方式:
第一種:直接在頁面中嵌入JavaScript代碼,包裹在<script>元素之間:
<script> console.log('Hello World'); </script>
注意:在使用<script>嵌入JavaScript代碼時,切記不要在代碼中的任何地方出現</script>。
執行下面的代碼時,會產生一個錯誤:
<script> function loadScript(){ alert('</script>'); } </script>
JavaScript代碼的執行順序:只要不存在defer和async屬性,JavaScript代碼就會從上至下依次解析。
第二種:使用外鏈腳本形式,必須有src屬性,並且指定一個外部JavaScript文件的連接。
<script src="example.js"></script>
注意:帶有src屬性的<script>元素不該該在其<script>和</script>標籤之間再包含額外的JavaScript代碼,嵌入代碼會被忽略。
只要不存在defer和async屬性,瀏覽器都會按照<script>出現的前後順序對它們依次進行解析。
通常將所有JavaScript引用放在<body>元素中頁面的內容後面。
2.2 延遲腳本
當給<script>元素添加了defer屬性時,src指向的外部文件會當即下載,但包含的腳本會延遲到瀏覽器遇到</html>標籤(整個頁面解析完畢)後再執行(按添加順序執行),會先於DOMContentLoaded事件執行。
<script defer="defer" src="example.js"></script>
<script async src="example2.js"></script>
會先執行example.js,而後執行example2.js
注意:defer只適合外部腳本文件。
2.3 異步腳本
async與defer屬性相似,都用於改變處理腳本的行爲,適用於外部腳本文件,並告訴瀏覽器當即下載,但標記爲async的腳本並不保證按照指定它們的前後順序執行。
<script async src="example.js"></script>
<script async src="example2.js"></script>
兩個執行順序不定。
指定async屬性的目的是不讓頁面等待兩個腳本下載和執行,從而異步加載頁面其餘內容。
注意:異步腳本不要在加載期間修改DOM。
異步腳本必定會在頁面的load事件前執行,但可能會在DOMContentLoaded事件觸發以前或以後執行。
2.4 使用外部文件的好處
可維護性:將JavaScript文件都放在一個文件夾中,比每次都須要到不一樣的HTML頁面修改JavaScript方便維護。
可緩存:瀏覽器會緩存全部外部JavaScript文件,因此當你有多個頁面使用同一個JavaScript腳本時,這個腳本只需下載一次。
2.5 <noscript>元素
當瀏覽器不支持JavaScript或被禁用時,顯示裏面的內容。
<noscript> 本頁面須要瀏覽器支持(啓用)JavaScript </noscript>
JavaScript由ECMAScript、DOM、BOM三部分組成;
ECMAScript由ECMA-262定義,提供核心語言功能;
文檔對象模型(DOM),提供訪問和操做網頁內容的方法和接口;
瀏覽器對象模型(BOM),提供與瀏覽器交互的方法和接口;
把JavaScript插入到HTML頁面中要使用<script>元素,能夠內嵌,也能夠外鏈文件;
使用defer屬性可讓腳本在文檔徹底呈現以後再執行,延遲腳本老是按照它們的順序執行;
使用async屬性表示當前腳本沒必要等待其餘腳本,也沒必要阻塞文檔呈現,不能保證按照它們在頁面中出現的順序執行。
使用<noscript>元素能夠指定在不支持腳本的瀏覽器中顯示的提示內容。