[英]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.