两个重要的<script>标签属性是src和async(或defer)。
src属性:src属性用于指定要引入的外部脚本文件的URL。当浏览器解析到包含src属性的<script>标签时,会进行外部脚本的加载和执行。例如:
```
<script src="path/to/script.js"></script>
```
通过`src`属性引入外部脚本可以实现代码的复用,避免代码重复,可以引入外部CDN提供的库文件或其他的JavaScript文件。
async和defer属性:async和defer属性用于异步加载和执行脚本,可以提高页面的加载性能。
- `async`属性:当浏览器遇到带有`async`属性的`<script>`标签时,会异步加载并执行脚本文件,不会阻塞文档的解析和渲染,适用于独立、互不依赖的脚本文件。
```
<script src="path/to/script.js" async></script>
```
- `defer`属性:当浏览器遇到带有`defer`属性的`<script>`标签时,会延迟脚本的执行,直到整个文档解析完成再执行,适用于有依赖关系的脚本文件。
```
<script src="path/to/script.js" defer></script>
```
`async`和`defer`属性的区别在于脚本的执行时机和文档的解析关系。`async`脚本等待外部脚本加载完毕后立即执行,不会阻塞文档的解析和渲染;而`defer`脚本则会在文档解析完成后按照顺序执行,也不会阻塞文档的解析。
需要注意的是,使用外部脚本时,可以同时设置async和defer属性,但这两个属性不能同时应用于同一个<script>标签。另外,行内脚本(通过<script>标签的内联方式编写的脚本)不支持async和defer属性。
defer的脚本执行顺序可以控制吗
是的,通过使用defer属性,你可以控制<script>标签的脚本执行顺序。
当页面包含多个带有defer属性的脚本标签时,这些脚本会按照它们在文档中出现的顺序依次加载,并且会在文档解析完成后按照它们在文档中出现的顺序依次执行。
例如,考虑以下代码片段:
<script src="script1.js" defer></script>
<script src="script2.js" defer></script>
<script src="script3.js" defer></script>
在这种情况下,script1.js会首先加载和执行,然后是script2.js,最后是script3.js。这确保了它们按照指定的顺序进行加载和执行。
值得注意的是,defer属性只对外部脚本文件有效,对于内联脚本(嵌入在<script>标签内部的脚本)不适用。另外,defer脚本仅在支持HTML5的浏览器中才有效,老旧的浏览器可能会忽略defer属性并立即加载和执行脚本。
通过合理使用defer属性,并按照需要的顺序排列脚本标签,你可以确保脚本按照你期望的顺序加载和执行,从而控制脚本执行的顺序。