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

Mer*_*erc 5 javascript es6-modules

如果我有以下情况:

<script type="module" src="one.js"></script>
<script type="module" src="two.js"></script>
<script type="module" src="three.js"></script>
Run Code Online (Sandbox Code Playgroud)
  1. 我说得对吗,你不能 100% 确定会在和之后three.js执行? one.jstwo.js

但是,如果我有:

<script type="module">
  import 'one.js'
  import 'two.js'
  import 'three.js'
</script>
Run Code Online (Sandbox Code Playgroud)
  1. 我是否可以确信将在和之后three.js执行?(这个很重要) one.jstwo.js

对可能重复的评论

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

Mik*_*keM 2

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

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

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

不,原因与上述相同。

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

在 ECMAScript 规范中,请参阅ModuleEvaluation方法,该方法迭代源文本模块记录的RequestedModules

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

当使用带有 src 属性的脚本标签导入模块时,如果评估顺序并不重要,则可以使用async属性在下载后立即执行它。