繁体   English   中英

es6的进出口是如何处理的? (Javascript)

[英]How are es6 imports and exports handled? (Javascript)

我的代码中有一个与导入和导出有关的错误。 我的理解是在运行任何代码之前处理所有导入,但是现在我不太确定。 我在下面的三个文件中有以下 MRE。

索引.html

<!-- index.html (Program entry point) -->
<html>
   <head>
      <script src="A.js" type="module"></script>
   </head>
    <body></body>
</html>

js

// A.js

import './B.js';

export default 'Hello World';

B.js

// 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM