[TOC]

<script> 元素用于嵌入或者引用可执行的代码。

<script> 常用属性:

  1. async:可选。表示应该立即下载脚本,但不应该阻碍页面中的其它操作,比如下载其它资源或者等待加载其它脚本。只对外部脚本文件有效。
  2. defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本文件有效。
  3. src:可选。表示包含要执行代码的外部文件。
  4. type:可选。
    1. 如果不写则默认为 JavaScript MIME type 类型。
    2. 如果值为 module,则表示使用 ES6 的 Modules,而且不受 defer 属性的影响。

延迟脚本的执行

script 元素定义了 defer 属性,相当于告诉浏览器立即下载脚本,并且不阻塞页面渲染,但是脚本延迟到整个页面都解析完毕后再执行。如果多个 script 元素定义了 defer 属性,则脚本按照它们出现的先后顺序执行。

异步执行脚本

script 元素定义了 async 属性,相当于告诉浏览器异步下载脚本,并尽可能快地执行脚本。异步下载脚本的过程并不阻塞页面的渲染。

有几点需要注意:

  1. 如果多个 script 元素定义了 async 属性,它们的执行顺序是不能够保证的。谁先下载完就谁先执行,这一点与 defer 不一样。
  2. 异步脚本一定会在页面的 load 事件前执行。

参考资料