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>元素能够指定在不支持脚本的浏览器中显示的提示内容。