Rumah  >  Soal Jawab  >  teks badan

Mengapakah saya mendapat ralat dan bukannya mengelog "undefined" ke konsol apabila menggunakan console.log() pada pembolehubah yang saya buat kemudian tetapi dalam teg skrip lain?

Mengapa coretan kod ini memberikan ralat "Rujukan Tidak DitangkapRalat: x tidak Ditakrifkan" dalam konsol

<body>
    <script>
        console.log(x);
    </script>
    
    <script>
        var x = 10;
    </script>
</body>

Dan rekod ini "tidak ditentukan"?

<body>
    <script>
        console.log(x);
        var x = 10;
    </script>
</body>

Saya cuba memahami pengisytiharan pembolehubah dan skop pembolehubah. Dan jangkakan peningkatan akan berlaku kerana keseluruhan kod berada dalam halaman yang sama. Tetapi kerana console.log() dipisahkan dalam teg skrip lain, saya mendapat ralat dan bukannya hanya mengelog "undefined" dalam konsol.

P粉579008412P粉579008412375 hari yang lalu504

membalas semua(1)saya akan balas

  • P粉536909186

    P粉5369091862023-09-13 00:07:23

    var 被提升,这意味着它可以在定义它的范围的开头访问,即使声明行可能位于范围的末尾。如果您在声明之前访问该 var,则它是 未定义 kerana anda masih perlu melakukan pengisytiharan dan mungkin memulakan pembolehubah kepada nilai tertentu. Jadi ini adalah cara contoh kedua anda berfungsi.

    Baca tentang peningkatan di sini:

    https://developer.mozilla.org/en-US/docs/glossary/lifting

    Tetapi dalam contoh pertama 2 有 2 个不同的作用域,因此第一个脚本中基本上不存在 var ,因此错误 not Defined. < /p>

    Ketahui tentang var dan skopnya di sini:

    https://developer.mozilla.org /en-US/docs/Web/JavaScript/Reference/Statements/var

    Penting Saya sangat menasihatkan agar tidak menggunakan var。请改用 constlet。使用 var 进行提升会导致错误,有时很难调试和修复。如果您需要在生产中仅使用 var. Gunakan const dan let sebaliknya. Menggunakan var untuk promosi boleh menyebabkan ralat yang kadangkala sukar untuk dinyahpepijat dan diperbaiki. Jika anda hanya perlu menggunakan

    dalam pengeluaran, hanya gunakan esbuild untuk menurunkan taraf kod anda kepada versi lama JS yang sesuai.

    constlet有点被提升,但是在提升状态下访问它们会导致运行时错误(这称为暂时的死区),这就是为什么它们更安全,因为您会立即收到错误,而不是静默地提升 varMenariknya, const dan let juga agak dipromosikan, tetapi mengaksesnya dalam keadaan tinggi menyebabkan ralat masa jalan (ini dipanggil zon mati sementara ), itulah sebabnya mereka lebih selamat kerana anda mendapat ralat serta-merta dan bukannya menaikkannya secara senyap

    meninggalkan anda dengan kemungkinan ralat yang anda tidak tahu.

    Mengenai zon mati temporal:

    https://developer.mozilla .org/en-US/docs/Web/JavaScript/Reference/Statements/let#temporal_dead_zone_tdz

    🎜
    <body>
        <script>
            console.log(x);
            const x = 10;
        </script>
    </body>

    balas
    0
  • Batalbalas