Adakah mengimport modul bermakna membenamkan kod modul pada baris yang sama dengan pernyataan import?
P粉269847997
P粉269847997 2023-09-16 18:25:30
0
1
424

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 diimport a diakses, tetapi tidak dimulakan, kerana penilaian

disekat 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.

P粉269847997
P粉269847997

membalas semua(1)
P粉165823783

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:

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>

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan