Apakah skop pembolehubah dalam JavaScript?
P粉696891871
P粉696891871 2023-08-21 15:35:39
0
2
455

Apakah skop pembolehubah dalam JavaScript? Adakah mereka mempunyai skop yang sama di dalam dan di luar fungsi? Atau adakah ia penting? Juga, jika pembolehubah ditakrifkan secara global, di manakah ia disimpan?

P粉696891871
P粉696891871

membalas semua (2)
P粉546257913

Javascript menggunakan rantai skop untuk menentukan skop fungsi yang diberikan. Biasanya terdapat skop global dan setiap fungsi yang ditentukan mempunyai skop bersarang sendiri. Mana-mana fungsi yang ditakrifkan dalam fungsi lain mempunyai skop setempat yang dikaitkan dengan fungsi luar. Ia sentiasa lokasi dalam kod sumber di mana skop ditakrifkan.

Satu elemen dalam rantaian skop pada asasnya ialah peta dengan penunjuk kepada skop induknya.

Apabila menghuraikan pembolehubah, JavaScript bermula dari skop paling dalam dan mencari ke luar.

    P粉165522886

    TLDR

    JavaScript mempunyai skop dan penutupan leksikal (juga dipanggil statik). Ini bermakna anda boleh menentukan skop pengecam dengan melihat kod sumber.

    Empat skop tersebut adalah seperti berikut:

    1. Global - kelihatan kepada semua kandungan
    2. Fungsi - Kelihatan di dalam fungsi (dan di dalam subfungsi dan bloknya)
    3. Blok - Kelihatan di dalam blok (dan di dalam sub-bloknya)
    4. Modul - Kelihatan dalam modul

    Kecuali untuk kes khas skop global dan modul, pembolehubah diisytiharkan menggunakanvar(函数作用域)、let(块作用域)和const(skop blok). Dalam mod ketat, kebanyakan bentuk pengisytiharan pengecam lain mempunyai skop blok.

    Gambaran keseluruhan

    Skop ialah kawasan dalam pangkalan kod di mana pengecam adalah sah.

    Persekitaran leksikal ialah pemetaan antara nama pengecam dan nilai yang dikaitkan dengannya.

    Skop dibentuk oleh sarang berpaut persekitaran leksikal, dengan setiap tahap sarang sepadan dengan persekitaran leksikal konteks pelaksanaan nenek moyang.

    Persekitaran leksikal yang dikaitkan ini membentuk skop "rantai". Peleraian pengecam ialah proses mencari sepanjang rantai ini untuk pengecam yang sepadan.

    Penyelesaian pengecam hanya akan dilakukan secara luaran. Dengan cara ini, persekitaran leksikal luar tidak dapat "melihat" persekitaran leksikal dalaman.

    Terdapat tiga faktor yang berkaitan semasa memutuskanskoppengecam dalam JavaScript:

    1. Cara mengisytiharkan pengecam
    2. Kedudukan pengisytiharan pengecam
    3. Sama ada dalammod ketatataumod tidak ketat

    Beberapa cara untuk mengisytiharkan pengecam:

    1. varletconst
    2. Parameter fungsi
    3. tangkap parameter blok
    4. Pengisytiharan fungsi
    5. Ungkapan fungsi bernama
    6. Sifat yang ditakrifkan secara tersirat pada objek global (iaitu ditinggalkanvardalam mod tidak ketat)
    7. importKenyataan
    8. eval

    Lokasi pengisytiharan beberapa pengecam:

    1. Konteks global
    2. Badan berfungsi
    3. Blok biasa
    4. Atas struktur kawalan (cth. gelung, jika, sementara, dsb.)
    5. Struktur kawalan
    6. Modul

    Gaya pengisytiharan

    var

    Pengecamvar声明的标识符具有函数作用域,除非它们直接在全局上下文中声明,此时它们将作为全局对象的属性添加,并具有全局作用域。它们在evaldiisytiharkan menggunakan

    mempunyai skop fungsi

    melainkan ia diisytiharkan secara langsung dalam konteks global, dalam hal ini ia ditambah sebagai sifat objek global dan mempunyai skop global. Terdapat peraturan berasingan untuk kegunaannya dalam fungsi

    .

    letconstbiar dan constPengecam

    diisytiharkan menggunakan mempunyai skop blok melainkan ia diisytiharkan secara langsung dalam konteks global, dalam hal ini ia mempunyai skop global.

    Nota:letconstvar都被提升。这意味着它们的逻辑定义位置是其封闭作用域(块或函数)的顶部。但是,使用letconstPembolehubah yang diisytiharkan tidak boleh dibaca atau diberikan sehingga aliran kawalan melepasi titik pengisytiharan dalam kod sumber. Tempoh sementara ini dipanggil zon mati sementara.

    function f() { function g() { console.log(x) } let x = 1 g() } f() // 1 because x is hoisted even though declared with `let`!
      Muat turun terkini
      Lagi>
      kesan web
      Kod sumber laman web
      Bahan laman web
      Templat hujung hadapan
      Tentang kita Penafian Sitemap
      Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!