如果我有以下情况:
<script type="module" src="one.js"></script>
<script type="module" src="two.js"></script>
<script type="module" src="three.js"></script>
- 我说得对吗,你不能 100% 确定
three.js
将被处决AFTER one.js
and two.js
?
但是,如果我有:
<script type="module">
import 'one.js'
import 'two.js'
import 'three.js'
</script>
- 我说得对吗?我可以有信心
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(使用前将#替换为@)