Aturan Emas Pertama:
JS tidak memiliki ruang lingkup tingkat blok (Anda dapat mengimplementasikannya sendiri dengan penutupan atau metode lain), hanya ruang lingkup tingkat fungsi. Variabel di luar fungsi dapat ditemukan dalam fungsi, tetapi variabel di dalam fungsi tidak dapat ditemukan di luar.
Pertama:
Mengapa ini? ?
var a = 10; function aaa () {// step-4alert (a); // step-5-> execute alert, pada saat ini, Anda hanya dapat menemukan bagian luar a = 10 sehingga kotak pop-up 10} fungsi bbb () {// step-2var a = 20; aaa (); // step-3} fungsi yang mendefinisikan (Aaa-non-1, AAA (); // Step-3} Function; Fungsi yang mendefinisikan adalah fungsi US = 20; AAA ();Bahkan, semua orang memahami prinsipnya, itu seharusnya hanya masalah kesalahan mudah, dan semuanya akan berubah.
Secondtry:
Mengapa ini? Karena ketika A ditugaskan B, B belum ditentukan, jadi A tidak ditentukan dan B adalah 10.
Pasal 2 Kode Emas:
Pencarian variabel adalah prinsip kedekatan. Untuk menemukan variabel yang ditentukan oleh VAR, ketika mereka tidak ditemukan di dekatnya, kemudian cari lapisan luar.
Lihat:
Mengapa ini? Ada dua alasan untuk ini: satu adalah pra-analisis, dan yang lainnya sedang mencari di dekatnya.
var a = 10; function aaa () {alert (a); // tidak terdefinisi. Saat mencari A, Anda akan mencari di fungsi. Karena efek pra-parsing, A tidak terdefinisi pada saat ini, jadi Anda tidak akan pernah mencari luar 10 var a = 20;/*preparsing var aalert (a); var a = 20;*/} aaa ();Perhatian:
Mari kita verifikasi item kedua. Meskipun itu adalah prinsip kedekatan, itu adalah untuk menemukan variabel yang dinyatakan oleh var di dekatnya. Ini karena variabel yang dinyatakan oleh VAR bersifat global. Di sini, nilai A baru saja dimodifikasi. Jadi hal di atas adalah karena a dari var tidak ditemukan dalam fungsi, jadi saya pergi ke luar dan menemukannya segera setelah saya mencari, jadi A mengingatkannya 10; tetapi kenyataannya adalah bahwa setelah A = 20, A memang 20, tetapi belum dieksekusi ketika diperingatkan ~~
Lihat ~
Contoh berikut lebih lanjut memverifikasi ruang lingkup fungsi JS:
Ini karena ketika waspada (a), a dalam fungsi BBB memang 20, tetapi lokal untuk peringatan kalimat (a) saat ini. Peringatan (a) tidak dapat menemukan A dalam fungsi BBB, sehingga tidak dapat menemukan A di fungsi AAA, jadi ia keluar dan menemukan 10.
Pasal 3 Kode Emas:
Ketika parameter digandakan dengan variabel lokal, prioritasnya setara.
contoh:
Juga: Saat melewati parameter, tipe dasar memberikan nilai, dan tipe referensi melewati referensi. (Tapi itu tidak terjadi setelah penugasan kembali)
var a = 5; var b = a; b += 3; peringatan (a); // 5var a = [1,2,3]; var b = a; b.push (4); waspada (a); // [1,2,3,4];
Tidak ada masalah dengan kode di atas, tetapi berikut ini berbeda.
Karena B dipindahkan, itu tidak menunjuk ke a.
Selanjutnya, ruang lingkup parameter dan variabel serupa:
Bandingkan keduanya:
Parameter di atas adalah tipe dasar, dan hanya nilai yang diteruskan. Berikut ini adalah tipe referensi: (juga termasuk kasus penugasan kembali)