Hari ini, magang kecil di perusahaan menanyakan perbedaan antara dua kode JS:
Kode 1:
<script type = "text/javascript"> var a = "hello"; tes fungsi () {var a; waspada (a); a = "dunia"; waspada (a); } </script>Kode 2:
<script type = "text/javascript"> var a = "hello"; function test () {alert (a); a = "dunia"; waspada (a); } </script>Saya pikir, ini sangat sederhana. Bukankah itu hanya masalah lingkup antara variabel global dan variabel lokal? Saya berkata: "Ketika variabel global digandakan dengan variabel lokal, ruang lingkup variabel lokal akan menimpa ruang lingkup variabel global. Setelah meninggalkan ruang lingkup variabel lokal, itu akan kembali ke ruang lingkup variabel global. Jadi hasil dari dua kode yang berjalan adalah: 1) Dunia 2 yang tidak terdefinisi) Hello World. Lalu saya secara acak menyusun contohnya sebagai berikut ini adalah: 1) Dunia 2 yang tidak terdefinisi.
<script> var a = 1; function test () {alert (a); var a = 2; waspada (a); } tes(); waspada (a); </script>Apa hasilnya sama? Apakah output 1 2 1? Yah, saya pikir sebelum saya mengirim test case kepadanya, tetapi setelah output tes ... hasil lari tidak ditentukan 2 1. Pada waktu itu, saya bingung dan bertanya kepada guru GU bahwa saya menyadari bahwa saya tidak tahu banyak tentang JS, jadi saya bekerja keras untuk belajar + tes, dan merangkumnya sebagai berikut:
1. Lingkup variabel JavaScript dibagi menurut blok metode (yaitu, dibagi dengan sepasang kawat gigi {} fungsi). Ingat, ini adalah blok fungsi, dan untuk, sementara, dan jika blok bukan kriteria divisi lingkup. Anda dapat melihat contoh -contoh berikut:
<script> function test2 () {alert ("sebelumnya untuk ruang lingkup:"+i); // Saya tidak diberi nilai (tidak tidak dideklarasikan! Gunakan variabel atau fungsi yang tidak dideklarasikan untuk melempar kesalahan fatal dan mengganggu eksekusi skrip) // pada saat ini nilai i diremehkan untuk (var i = 0; i <3; i ++) {waspada ("dalam ruang lingkup:"+i); // Saya adalah 0, 1, 2, dan ketika saya berusia 3 tahun, loop dilompat} peringatan ("Setelah cakupan:"+i); // Saya berusia 3 tahun, perhatikan bahwa sudah di luar untuk ruang lingkup, tetapi saya masih dipertahankan sebagai 3 sementara (benar) {var j = 1; merusak; } peringatan (j); // J adalah 1, perhatikan bahwa sudah aktif saat lingkup luar, nilai j tetap pada 1 if (true) {var k = 1; } peringatan (k); // Nilai k adalah 1. Perhatikan bahwa itu sudah berada di luar ruang lingkup, tetapi nilai k tetap pada 1} test2 (); // jika (ruang lingkup fungsi luar) output variabel i, j, dan k yang hanya ada di test2 akan memiliki efek ajaib? waspada (i); //kesalahan! Itu benar, ini adalah kesalahan, karena variabel I tidak dinyatakan (tidak ditugaskan, membedakan output dari baris pertama fungsi test2), menghasilkan kesalahan skrip, dan program berakhir di sini! peringatan ("Akankah baris ini mencetak masih output?"); // tidak dieksekusi peringatan (j); // tidak dieksekusi peringatan (k); // tidak dieksekusi </script>2. Sebelum dieksekusi, JavaScript akan melakukan analisis lengkap dari bagian deklarasi dari seluruh file skrip (termasuk variabel lokal) untuk menentukan ruang lingkup variabel aktual. Bagaimana cara memahami? Lihat contoh berikut:
<script> var a = 1; function test () {alert (a); // A tidak ditentukan! A ini bukan variabel global, karena variabel lokal duplikat telah dinyatakan dalam lingkup fungsi (baris terakhir keempat dari badan fungsi) dan // Variabel global A ditimpa, yang menunjukkan bahwa JavaScript akan melakukan analisis lengkap dari bagian definisi seluruh file skrip sebelum dieksekusi. Oleh karena itu, sebelum fungsi uji () dijalankan, // variabel A dalam badan fungsi ditunjuk ke variabel lokal internal alih -alih variabel global eksternal. Tetapi pada saat ini A hanya dinyatakan dan belum menetapkan nilai, sehingga output tidak ditentukan. A = 4 Peringatan (a); // A adalah 4, apakah tidak ada ketegangan? A di sini masih merupakan variabel lokal! var a; // variabel lokal A menyatakan peringatan (a); // A masih 4, karena 4 telah ditugaskan ke uji sebelum} (); waspada (a); // A adalah 1, yang tidak ada dalam lingkup fungsi, nilai a adalah nilai variabel global </script>3. Ketika variabel global digandakan dengan variabel lokal, ruang lingkup variabel lokal akan menimpa ruang lingkup variabel global. Setelah meninggalkan ruang lingkup variabel lokal, ia kembali ke ruang lingkup variabel global. Ketika variabel global bertemu dengan variabel lokal, bagaimana menggunakan variabel global? Gunakan window.globalvariablename.
<script> var a = 1; function test () {alert (window.a); // A 1, di sini A adalah variabel global! var a = 2; // Variabel lokal A didefinisikan dalam peringatan baris ini (a); // A IS 2, dan A Here adalah variabel lokal! } tes(); waspada (a); // A adalah 1, tidak ada dalam lingkup fungsi, nilai a adalah nilai variabel global </script>Tentu saja, untuk lebih banyak artikel, silakan merujuk ke artikel terkait di bawah ini.