1. 一个完整的 javascript 实现应该由以下三个部分构成:
核心(ECMAScript)、文档对象模型(DOM)、浏览器对象模型(BOM)
(1)核心(ECMAScript):这一部分主要是js的基本语法。
(2)BOM:Brower Object Model(浏览器对象模型),主要是获取浏览器信息或操作浏览器的,例如:浏览器的前进与后退、浏览器弹出提示框、浏览器地址栏输入网址跳转等操作等。
(3)DOM:Document Object Model(文档对象模型),此处的文档暂且理解为html,html加载到浏览器的内存中,可以使用js的DOM技术对内存中的html节点进行修改,用户从浏览器看到的是js动态修改后的页面。(增删改查);js操纵html节点(包括更改外观和内容等)
2. script 标签 async、 defer
script 标签用于 加载脚本 和 执行脚本
使用defer或者async的目的:使得script 标签无论在什么情况下都不会阻塞 DOM 结构的渲染
defer: 同步
立即下载,延迟执行。等到整个页面都解析完毕之后再运行。所以如果 script 标签要写在<head></head>里,需要加defer
defer 只适用于外部脚本,src引入~使用方式如下:
<script src='./a.js' defer='defer'></script>
async: 异步
异步加载script, 一边浏览器 立即加载 该script 标签,一边解析页面,谁先加载完谁先执行
async 也是只适用于外部脚本,使用方式如下:
<script src='./a.js' async></script>
如果不写async, 也不写defer , 则浏览器会根据代码顺序从上向下加载,解析完成第一个 script 后,解析第二个……后面的要想被解析必须等到前面的解析完毕。
推荐使用场景:
defer: script 里的代码 依赖 dom 元素
async: script 里的代码不依赖dom元素