Dari ReferenceError: tidak boleh mengakses perisytiharan leksikal 'X' sebelum pemulaan - JavaScript |
(modul kemasukan): a.js
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 menerangkan:
Dalam contoh ini, pembolehubah yang diimporta
diakses, tetapi tidak dimulakan, kerana penilaiandisekat oleh penilaian modul semasa
a
被访问,但是未初始化,因为a.js
的评估被当前模块b.js
.
Saya faham ini bermakna mengimport modul bermakna membenamkan kod modul ke dalam baris pernyataan import. Dengan kata lain, apabila menyusun, a.js
menjadi seperti ini:
console.log(a); // ReferenceError: Cannot access 'a' before initialization const b = 1; const a = 2;
Adakah pemahaman ini betul? Saya tidak melihat ini dijelaskan dalam import - JavaScript |. Oleh kerana promosi berubah-ubah, saya tidak tahu bagaimana untuk menguji ini kerana menyusun semula baris dalam a.js
tidak mengubah keputusan.
Kod daripada modul yang diimport bukan sahaja dibenamkan ("ditampal") tetapi wujud dalam penutupan yang berasingan. Walaupun ini sudah tentu merupakan penyederhanaan yang berlebihan, saya membandingkan modul dengan fungsi dan
export
语句与其return
kenyataan:Oleh kerana modul mengimport antara satu sama lain, ia tidak boleh dimuatkan dalam sebarang pesanan: menekan sebarang butang akan mengakibatkan ralat "Melebihi saiz timbunan panggilan maksimum".
Tetapi jika anda mengalih keluar baris yang tidak perlu (hanya mengisi pembolehubah tempatan yang kemudiannya dibuang) ia akan berfungsi.