Rumah  >  Soal Jawab  >  teks badan

Adakah mengimport modul bermakna membenamkan kod modul pada baris yang sama dengan pernyataan import?

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粉269847997P粉269847997399 hari yang lalu385

membalas semua(1)saya akan balas

  • P粉165823783

    P粉1658237832023-09-17 00:53:49

    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.

    balas
    0
  • Batalbalas