ES6 导入的执行顺序(HTML 和代码)

2024-03-25

如果我有以下情况:

<script type="module" src="one.js"></script>
<script type="module" src="two.js"></script>
<script type="module" src="three.js"></script>
  1. 我说得对吗,你不能 100% 确定three.js将被处决AFTER one.js and two.js?

但是,如果我有:

<script type="module">
  import 'one.js'
  import 'two.js'
  import 'three.js'
</script>
  1. 我说得对吗?我可以有信心three.js将被处决AFTER one.js and two.js? (这个很重要)

对可能重复的评论

我知道它看起来像一个重复的问题,但请记住,这个问题的目的是确认通过 HTML 导入和通过 JavaScript 导入的非常不同的行为


我说的对吗,你不能 100% 确定 Three.js 会在 one.js 和 Two.js 之后执行?

是的,因为例如 Three.js 可能已经导入到 one.js 中,并且模块仅被评估一次。

我是否可以确信 Three.js 将在 one.js 和 Two.js 之后执行? (这个很重要)

不,原因与上述相同。

在导入模块的两种方式中,如果之前没有导入任何模块,那么它们将按照它们在标记或代码中出现的顺序进行评估。

在 ECMAScript 规范中,请参阅模块评估 https://262.ecma-international.org/6.0/#sec-moduleevaluation迭代源文本模块记录的方法请求的模块 https://262.ecma-international.org/6.0/#sec-source-text-module-records:

此记录表示的模块使用的所有 ModuleSpecifier 字符串的列表,用于请求导入模块。该列表是按源代码出现顺序排列的。

当使用带有 src 属性的 script 标签导入模块时,如果评估顺序不重要,async https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-async属性可用于在下载后立即执行它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6 导入的执行顺序(HTML 和代码) 的相关文章

随机推荐