script两个重要的属性!

56 阅读2分钟

两个重要的<script>标签属性是srcasync(或defer)。

src属性:src属性用于指定要引入的外部脚本文件的URL。当浏览器解析到包含src属性的<script>标签时,会进行外部脚本的加载和执行。例如:

```
 <script src="path/to/script.js"></script>
```

通过`src`属性引入外部脚本可以实现代码的复用,避免代码重复,可以引入外部CDN提供的库文件或其他的JavaScript文件。

asyncdefer属性:asyncdefer属性用于异步加载和执行脚本,可以提高页面的加载性能。

-   `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`脚本则会在文档解析完成后按照顺序执行,也不会阻塞文档的解析。

需要注意的是,使用外部脚本时,可以同时设置asyncdefer属性,但这两个属性不能同时应用于同一个<script>标签。另外,行内脚本(通过<script>标签的内联方式编写的脚本)不支持asyncdefer属性。

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属性,并按照需要的顺序排列脚本标签,你可以确保脚本按照你期望的顺序加载和执行,从而控制脚本执行的顺序。