知识点1:
script标记有6个属性 1.async:可选,立即下载脚本,但是又不妨碍页面中的其他操作 2.charset:可选,很少用 3.defer:可选,脚本延迟到文档完全被解析和显示之后再执行,只对外部脚本有效 4.language:已废弃 5.src:表示要执行代码的外部文件 6.type:用于表示编写脚本语言的MIME类型,一般为text/javascript知识点2:
不管是解析外部js文件(包括下载该文件),还是解析嵌入式js代码,页面的处理都会暂停知识点3:
script的src属性还可以包含来自外部域的js文件,这是实现跨域传值jsonp的基础,但是如果不是自己能控制的服务器,需要多加小心。知识点4:
script脚本的位置 若放在head中,符合将所有外部文件(包括外部css文件)放到同一个地方的要求,但是这也就意味着,必须要等js文件下载,解析,执行完毕后才能呈现页面的内容,(遇到body标记,才能呈现内容)。对于很多js代码的页面来说,会导致浏览器呈现页面明显的延迟,延迟期间浏览器是一片空白的。 因此script一般放在</body>前面.知识点5:延迟脚本defer
脚本文件会被立即下载,被延迟到整个页面解析完毕后再运行(浏览器遇到/html标签后)H5规范要求脚本按照他们出现的先后顺序执行,而且所有的脚本回先于DOMContentLoaded事件执行,但是延迟脚本并不一定会按照顺序执行,也不一定会在DOMContentLoaded事件触发之前执行,因此一个页面最好只有一个延迟脚本.
知识点6:异步脚本async
脚本文件立即下载,谁先下载完谁先执行,脚本的下载和执行不会影响页面的加载知识点7:总结
正常的脚本加载和解析:遇到script就会下载,解析。前一个脚本解析完成,再加载,解析下一个脚本。并且页面的加载停止 defer:立即下载,等待页面加载完成再执行 async:多个脚本同时下载,谁先下载完谁先执行,可以和页面加载同时进行