type=”module”、defer、async属性的区别

<script> 标签无 type="module" 属性时,deferasync 属性都只可以被用在 <script> 元素的外部方式,如果被用在 <script> 元素的内部方式,则会被忽略。

<script> 标签有 type="module" 属性时, deferasync 属性都可以被用在 <script> 元素的外部方式和内部方式。

1.type="module"属性

加载和执行脚本:参考 defer 属性。

注意:虽然 type="module"defer 属性在加载和执行脚本方面相同,但区别在于 type="module" 作用于模块,而 defer 作用于普通脚本。

<script type="module" src="./file.js"></script>

<script type="module">
  //模块代码
</script>

2.defer属性

加载(下载)脚本:异步并行。

执行脚本:无论是普通脚本还是模块,</html> 元素之后,触发 DOMContentLoaded 事件之前,按声明时的顺序执行。不过在实际当中,推迟执行的脚本不一定总会在 DOMContentLoaded 事件之前执行或按声明时的顺序执行,因此最好只包含一个这样的脚本。defer 属性对模块没有影响,模块本身就隐式地包含 defer 属性。

<script src="./file.js" defer></script>
<script type="module" src="./file.js" defer></script>

<script type="module" defer>
  //模块代码
</script>

3.async属性

加载(下载)脚本:异步并行。

执行脚本:无论是普通脚本还是模块,</html> 元素之前或之后,触发 load 事件之前,触发 DOMContentLoaded 事件之前或之后,不按声明时的顺序执行,而是按先加载(下载)下来的先执行。

<script src="./file.js" async></script>
<script type="module" src="./file.js" async></script>

<script type="module" async>
  //模块代码
</script>

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/experience/javascriptexp/34014.html

(1)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2024年1月16日 13:52
下一篇 2025年1月1日 22:02

相关推荐

  • JavaScript语言的可计算名

    可计算名语法用于使用表达式的返回值作为成员名。 支持类的成员:静态字段、静态访问器属性、静态方法、实例字段、实例访问器属性、实例方法。 支持对象字面量的成员:数据属性、访问器属性、方法。 方括号 [] 内可以为任何 JavaScript 表达式,表达式的返回值的类型只可以为 字符串类型(包括空字符串) 或者 符号类型。…

    JavaScript经验 2025年4月3日
    01010
  • JavaScript对象简谱(JavaScript Object Notation,JSON)详解

    1.结构(structure) 1.1对象(object) 对象(object)是“键/值”对的无序集合。 一个对象以左花括号 { 开始,然后以右花括号 } 结束。键必须使用双引号字符串,每个键后跟一个冒号 :  ,“键/值”对之间使用逗号 , 分隔。 1.2数组(array) 数组(array)是值的有序集合。 一个…

    JavaScript经验 2023年3月2日
    08230
  • Node.js代码的三种运行方式

    1.node -e | -p <command>命令方式 2.node hello.js文件方式 hello.js 文件代码清单: 启动终端,使用 cd 命令,切换到存放 hello.js 文件的目录。执行以下命令: 3.node -i交互方式 node -i 可简写为 node。

    JavaScript经验 2023年2月23日
    01.3K0

发表回复

登录后才能评论