Setiap byte dari program JavaScript dieksekusi dalam konteks eksekusi ini atau itu. Anda dapat menganggap konteks ini sebagai tetangga kode, yang dapat menunjukkan setiap baris kode: dari mana asalnya, dan siapa teman dan tetangga. Ya, ini adalah informasi yang sangat penting, karena JavaScript Society memiliki aturan yang cukup ketat yang menetapkan siapa yang dapat berinteraksi dengan siapa. Konteks operasi adalah komunitas dengan gerbang, bukan pintu kecil yang terbuka di dalamnya.
Kita biasanya dapat menyebut batas -batas sosial ini sebagai lingkup dan memiliki kepentingan yang cukup untuk membuat undang -undang dalam piagam masing -masing tetangga, yang merupakan rantai ruang lingkup konteks yang ingin kita bicarakan. Dalam hubungan lingkungan tertentu, kode hanya dapat mengakses variabel dalam rantai lingkupnya. Dibandingkan dengan variabel di luar lingkungannya, kode lebih suka berurusan dengan lokal (lokal, mis. Lokal).
Setiap bahasa pemrograman memiliki konsep ruang lingkup. Sederhananya, ruang lingkup adalah ruang lingkup variabel dan fungsi yang dapat diakses, yaitu ruang lingkup mengendalikan visibilitas dan siklus hidup variabel dan fungsi. Lingkup JavaScript selalu menjadi titik pengetahuan yang sulit dipahami dalam pengembangan front-end. Ingat beberapa kata untuk dengan mudah menyelesaikan ruang lingkup JavaScript.
1. "Tidak ada ruang lingkup level blok di JavaScript"
Ada ruang lingkup level blok di Java atau C#, yaitu, kawat gigi juga merupakan ruang lingkup.
public static void main () {if (1 == 1) {string name = "tujuh"; } System.out.println (name);} // Laporkan kesalahan public static void main () {if (1 == 1) {string name = "tujuh"; } Console.writeLine (name);} // Laporkan kesalahanTidak ada ruang lingkup level blok di JavaScript
fungsi main () {if (1 == 1) {var name = 'tujuh'; } console.log (name);} // output: tujuh2. JavaScript mengadopsi ruang lingkup fungsi
Dalam JavaScript, setiap fungsi bertindak sebagai ruang lingkup, dan variabel dalam ruang lingkup internal tidak dapat diakses secara eksternal.
function main () {var innerervalue = 'tujuh';} main (); console.log (innervalue); // Kesalahan: ReferenceError yang Tak Terbaik: Innervalue tidak didefinisikan3. Rantai Lingkup JavaScript
Karena setiap fungsi dalam JavaScript adalah ruang lingkup, jika fungsi fungsi bersarang muncul, rantai lingkup akan muncul.
xo = 'Alex'; fungsi func () {var xo = "tujuh"; function inner () {var xo = 'alvin'; console.log (xo); } dalam ();} func ();Sebagai contoh, kode di atas muncul dalam rantai lingkup yang terdiri dari tiga lingkup. Jika rantai lingkup muncul, pesanan akan muncul saat mencari variabel. Untuk contoh di atas:
Ketika Console.log (XO) dieksekusi, perintah pencariannya adalah mencari根据作用域链从内到外. Jika lapisan dalam tidak ada, itu secara bertahap akan melihat ke atas sampai tidak ada kecuali ditemukan.
4. Rantai lingkup Javascript telah dibuat sebelum eksekusi
Lingkup JavaScript telah dibuat sebelum dieksekusi. Ketika dieksekusi di masa depan, Anda hanya perlu mencari sesuai dengan rantai lingkup.
Contoh 1:
xo = 'Alex'; fungsi func () {var xo = "tujuh"; function inner () {console.log (xo); } return dalam;} var ret = func (); ret (); // hasil output: tujuhKode di atas sudah ada sebelum fungsi disebut:
Global Scope -> Func Fungsi Lingkup -> Lingkup Fungsi Dalam
Saat mengeksekusi [ret ();], karena mengacu pada fungsi dalam, rantai ruang lingkup fungsi ini telah didefinisikan sebagai: ruang lingkup global -> lingkup fungsi fungsi -> ruang lingkup fungsi dalam, jadi ketika mengeksekusi [ret ();], variabel akan ditemukan berdasarkan rantai ruang lingkup yang ada.
Contoh 2:
xo = 'Alex'; fungsi func () {var xo = "eirc"; function inner () {console.log (xo); } xo = 'tujuh'; return dalam;} var ret = func (); ret (); // hasil output: tujuhKode di atas memiliki tujuan yang sama dengan Contoh 1, dan juga menekankan bahwa rantai lingkup sudah ada sebelum fungsi disebut:
Global Scope -> Func Fungsi Lingkup -> Lingkup Fungsi Dalam
Secara berbeda, saat mengeksekusi [var ret = func ();], nilai variabel XO dalam ruang lingkup fungsi telah diatur ulang menjadi "tujuh" dari "Eric", jadi ketika mengeksekusi [ret ();] nanti, Anda hanya dapat menemukan "tujuh".
Contoh 3:
xo = 'Alex'; function bar () {console.log (xo);} func fungsi () {var xo = "tujuh"; Return Bar;} var ret = func (); ret (); // hasil output: AlexDalam kode di atas, dua rantai lingkup telah dibuat sebelum fungsi dijalankan:
Lingkup Global -> Lingkup Fungsi Bar
Global Scope -> Func Function Scope
Saat mengeksekusi [ret ();], ret mengacu pada fungsi batang, dan rantai ruang lingkup fungsi batang sudah ada: ruang lingkup lingkup global -> lingkup fungsi batang, jadi ketika mengeksekusi, itu akan dicari berdasarkan rantai ruang lingkup yang ada.
5. Pernyataan sebelumnya
Jika Anda tidak membuat variabel dan menggunakannya langsung di JavaScript, kesalahan akan dilaporkan:
Console.log (xxoo); // Kesalahan: Referensi Tanpa Dianbah: XXOO tidak didefinisikan
Dalam JavaScript, jika nilai dibuat tanpa menetapkan nilai, nilainya tidak terdefinisi, seperti:
var xxoo; console.log (xxoo); // output: tidak terdefinisi dalam fungsi jika ditulis seperti ini: function foo () {console.log (xo); var xo = 'tujuh';} foo (); // output: tidak terdefinisiKode di atas tidak melaporkan kesalahan tetapi output tidak ditentukan. Alasannya adalah bahwa sebelum fungsi JavaScript dieksekusi, mereka akan mendeklarasikan semua variabel di dalamnya tanpa menetapkan nilai. Oleh karena itu, ini setara dengan contoh di atas bahwa fungsi telah dieksekusi var xo ketika "dikompilasi"; Jadi output dari kode di atas tidak ditentukan.
JS adalah bahasa yang sangat menarik. Karena banyak fiturnya ditujukan untuk pengoperasian DOM di HTML, tampaknya santai dan sedikit kurang ketat. Namun, dengan kemakmuran yang berkelanjutan dan pengembangan front-end dan munculnya simpul, JS tidak lagi menjadi "bahasa mainan" atau "ekstensi CSS" di era jQuery. Yang disebutkan dalam artikel ini mudah untuk dibingungkan atau disalahpahami untuk para pemula dan pengembang JS yang telah melalui pengembangan web tradisional. Saya harap artikel ini bisa membantu.