Importer un module signifie-t-il intégrer le code du module sur la même ligne que l'instruction d'importation ?
P粉269847997
P粉269847997 2023-09-16 18:25:30
0
1
422

De ReferenceError : impossible d'accéder à la déclaration lexicale 'X' avant l'initialisation - JavaScript MDN, voici un exemple d'importation invalide :

a.js (module d'entrée) :

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 explique :

Dans cet exemple, la variable importée a est accédée, mais pas initialisée, car l'évaluation de a被访问,但是未初始化,因为a.js的评估被当前模块b.js est bloquée par l'évaluation du module actuel

.

a.jsJe comprends que cela signifie qu'importer un module signifie intégrer le code du module dans la ligne de l'instruction d'importation. Autrement dit, lors de la compilation,

devient comme ceci :

console.log(a); // ReferenceError: Cannot access 'a' before initialization
const b = 1;

const a = 2;
a.jsCette compréhension est-elle correcte ? Je ne vois pas cela expliqué dans import - JavaScript MDN. En raison de la promotion variable, je ne sais pas comment tester cela car la réorganisation des lignes dans

ne change pas le résultat. 🎜
P粉269847997
P粉269847997

répondre à tous(1)
P粉165823783

Le code des modules importés n'est pas simplement intégré (« collé ») mais existe dans une fermeture distincte. Bien qu'il s'agisse certainement d'une simplification excessive, je compare les modules aux fonctions et aux export语句与其return instructions :

function a_js() {
  var b = b_js(); // 不必要的行
  return 2;
}

function b_js() {
  var a = a_js();
  console.log(a);
  return 1;
}
<button onclick="a_js()">import a.js</button>
<button onclick="b_js()">import b.js</button>

Étant donné que les modules s'importent les uns les autres, ils ne peuvent pas être chargés dans n'importe quel ordre : appuyer sur n'importe quel bouton entraînera une erreur "Taille maximale de la pile d'appels dépassée".

Mais si vous supprimez les lignes inutiles (remplissez simplement une variable locale qui est ensuite supprimée), cela fonctionnera.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal