<script>元素
1.属性1 — async(立即下载,立即执行):
立即下载脚本,只对外部脚本文件有效。
加载、执行外部js的同时,并行进行DOM文档的加载与渲染。
注意:
html和js不一定谁先加载完成,因此,不要在异步脚本加载期间修改DOM。即,window.onload中不要操作DOM。
标记为async的脚本并不保证按照指定它们的先后顺序执行。
2.属性2 — defer(立即下载,延迟执行):
设置脚本在延迟到DOM文档完全解析和显示之后,再执行。只对外部脚本文件有效。
defer的script下载时,不会阻塞浏览器其他进程,可以与页面中其他资源并行下载。
(加载表现和async相同)
规范:
多个设置为defer的脚本,按照它们出现的先后顺序执行。
现实:
延迟脚本并不一定按照顺序执行。最好只包含一个延迟脚本。
3.<script>标签执行规则(没有设置async、defer的一般情况):
在解释器对<script>元素内部的所有代码求值完毕以前,页面中的其余内容都不会被浏览器加载或显示。
解析外部JavaScript文件(包括下载该文件)时,页面的处理也会有暂时的停止。
—— 注:这里指的是普通的、不带async/defer的<script>