Rumah > Soal Jawab > teks badan
P粉5462579132023-08-22 12:41:43
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粉1655228862023-08-22 10:58:25
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:
Kecuali untuk kes khas skop global dan modul, pembolehubah diisytiharkan menggunakan var
(函数作用域)、let
(块作用域)和const
(skop blok). Dalam mod ketat, kebanyakan bentuk pengisytiharan pengecam lain mempunyai skop blok.
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 memutuskan skop pengecam dalam JavaScript:
Beberapa cara untuk mengisytiharkan pengecam:
var
,let
和const
var
dalam mod tidak ketat) import
Kenyataaneval
Lokasi pengisytiharan beberapa pengecam:
Pengecam var
声明的标识符具有函数作用域,除非它们直接在全局上下文中声明,此时它们将作为全局对象的属性添加,并具有全局作用域。它们在eval
diisytiharkan menggunakan
let
和const
biar dan const
Pengecam
Nota: let
,const
和var
都被提升。这意味着它们的逻辑定义位置是其封闭作用域(块或函数)的顶部。但是,使用let
和const
Pembolehubah 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`!