JavaScript实现
javascript与ECMAScript是不同的,一个完整的javascript应该由三部分组成:
- 核心(ECMAScrpit)
- 文档对象模型(DOM)
- 浏览器对象模型(BOM)
ECMAScript
ECMAScript是JavaScript的核心,但它并不依赖JS或浏览器而存在。JS实现了ECMAScript,Adobe Flash也实现了ECMAScript。浏览器是ECMAScript的众多宿主环境之一,Node,Flash都是他的宿主环境。宿主环境不仅实现了ECMAScript,还提供了相应功能的拓展。比如JS就提供了DOM。
现在ECMAScript已经发展到了7,要继续学习~~~
DOM
最初的DOM1级由两个部分组成:DOM Core和DOM HTML。DOM Core规定了如何映射基于XML的文档结构,以便简化对文档中任意部分的访问操作。DOM HTML则增加了针对HTML的对象和方法。HTML是基于XML的标记语言。与XML不同的是,HTML的标签都是固定的,且同时担任着显示数据的任务。XML的数据标签是不定的,且不负责显示。还有些其他的语言也基于标记语言:SVG,MathML等。
DOM2添加了一些新的模块:
- DOM Views:定义了跟踪不同文档视图的接口
- DOM Events:定义了事件和处理事件的接口(现在JS最重要的特点就基于此)
- DOM Style:基于CSS为元素应用样式的接口
- DOM Traversal and Range:定义了便利和操作文档树的接口
DOM3添加了新的模块: - DOM Load and Save:统一的加载和保存文档的方式
- DOM Validation:验证文档
DOM3还对DOM Core做了拓展,支持XML 1.0
BOM
BOM只处理与浏览器有关的部分,包括一些扩展:弹出新窗口,窗口分辨率的等,JS中常用的window对象就是BOM的一部分。
JavaScript插入
script标签
我们通过script标签来将JS代码或文件插入HTML,它有这么几个有用的属性:
- async:立即异步加载脚本文件,执行的顺序自然就不得而知了
- defer:立即下载,但脚本延迟到文档被完全解析和显示后再执行,即遇到/html标签。需要注意的是,内部script标签不支持这个属性。在文档中有多个含有defer属性的script标签时,按理说应该是按照出现的先后顺序执行,且都先于DOMContentLoaded事件执行。但是事实并不总是这么理想。使用时要注意。
- src:外部脚本地址
- type:出于种种原因,大家还是使用text/javascript
插入位置
浏览器会按顺序依次解析执行script标签,在一个script中的标签解析玩之前是不会解析下一个的,这就令引用的顺序非常重要。一般所有的引用会放在head标签中,但是这会导致在所有script文件加载完之后才会开始显示body标签里的元素。现代Web应用的做法都是放在body结束之前。
noscript标签
这个标签中的元素会在浏览器不支持脚本或脚本被禁用时显示,可用于显示一个提示用的p标签之类的。其他情况下这里的元素被忽略。