[英]How are es6 imports and exports handled? (Javascript)
我的代码中有一个与导入和导出有关的错误。 我的理解是在运行任何代码之前处理所有导入,但是现在我不太确定。 我在下面的三个文件中有以下 MRE。
<!-- index.html (Program entry point) -->
<html>
<head>
<script src="A.js" type="module"></script>
</head>
<body></body>
</html>
// A.js
import './B.js';
export default 'Hello World';
// B.js
import message from './A.js';
console.log(message);
运行时,产生此错误: Uncaught ReferenceError: Cannot access 'message' before initialization at B.js:5
为了让事情变得更奇怪,如果我让index.html
指向B.js
,那么程序运行良好(不更改任何其他文件)。
我之前的理解是首先评估所有的导入/导出,然后才运行代码的 rest。 然而,这个片段似乎暗示了“导入链”被跟踪,然后每个文件从下到上评估,每个导出都随之而来。 这意味着如果导入树上的“下层”文件需要从它上面的东西导出,那么它就不起作用。 但对我来说,这将是非常奇怪和反直觉的行为。
所以我的问题是,原因是什么? 我对如何评估进口/出口的顺序的理解是否错误? 或者这是 Chrome/Edge 中的错误? (不幸的是无法测试任何其他人)还是我错过了其他东西???
为什么它的行为方式是这样的?
谢谢你的帮助
- 凯尔丹
在 A.js 中不要导入 B.js
// A.js
export default 'Hello World';
否则你将有一个循环依赖。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.