簡體   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