Bedeutet das Importieren eines Moduls, dass der Code des Moduls in derselben Zeile wie die Importanweisung eingebettet wird?
P粉269847997
P粉269847997 2023-09-16 18:25:30
0
1
347

Von ReferenceError: Vor der Initialisierung kann nicht auf die lexikalische Deklaration „X“ zugegriffen werden – JavaScript MDN, hier ist ein Beispiel für einen ungültigen Import:

a.js(Einstiegsmodul):

import { b } from "./b.js"; export const a = 2;

b.js:

import { a } from "./a.js"; console.log(a); // ReferenceError: Cannot access 'a' before initialization export const b = 1;

MDN erklärt:

In diesem Beispiel wird auf die importierte Variableazugegriffen, sie wird jedoch nicht initialisiert, da die Auswertung vona被访问,但是未初始化,因为a.js的评估被当前模块b.jsdurch die Auswertung des aktuellen Moduls

blockiert wird.

a.jsIch verstehe darunter, dass das Importieren eines Moduls das Einbetten des Modulcodes in die Zeile der Importanweisung bedeutet. Mit anderen Worten: Beim Kompilieren wird

so:

console.log(a); // ReferenceError: Cannot access 'a' before initialization const b = 1; const a = 2;
a.jsIst dieses Verständnis richtig? Ich sehe dies nicht in import - JavaScript MDN erklärt. Aufgrund der variablen Heraufstufung weiß ich nicht, wie ich das testen soll, da das Neuanordnen der Zeilen in

das Ergebnis nicht ändert.
P粉269847997
P粉269847997

Antworte allen (1)
P粉165823783

从导入的模块中的代码不仅仅是嵌入("粘贴"),而是存在于一个独立的闭包中。虽然这肯定是一个过度简化,但我将模块与函数进行比较,将export语句与其return语句进行比较:

function a_js() { var b = b_js(); // 不必要的行 return 2; } function b_js() { var a = a_js(); console.log(a); return 1; }
 

因为模块相互导入,它们不能以任何顺序加载:按下任何按钮都会导致"Maximum call stack size exceeded"错误。

但是如果你删除不必要的行(只是填充一个然后被丢弃的局部变量),它就可以工作。

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!