1. Variabel lokal digunakan terlebih dahulu dan kemudian dideklarasikan, yang tidak mempengaruhi variabel eksternal dengan nama yang sama.
Copy kode kodenya sebagai berikut:
var x = 1; // --> variabel eksternal x
fungsi fn(){
alert(x); // --> variabel lokal tidak terdefinisi x digunakan terlebih dahulu
var x = 2; // deklarasikan dan tetapkan nanti
}
fn();
peringatan(x); // --> 1<BR>
Poin pertama adalah kalimat pertama dalam fungsi fn menghasilkan x, dan x didefinisikan pada kalimat kedua. Ini diperbolehkan di JS, dan diperbolehkan di sini berarti program dapat berjalan tanpa kesalahan sintaksis.
Namun tidak diperbolehkan dalam bahasa lain seperti C dan Java. Variabel harus dideklarasikan sebelum digunakan, seperti
Copy kode kodenya sebagai berikut:
Tes kelas publik {
public static void main(String[] args) {
System.out.println(x); //Gunakan terlebih dahulu
int x = 10; // Posting deklarasi
}
}
Di Java, kompiler akan memunculkan kesalahan dan program tidak dapat dijalankan.
Poin kedua adalah variabel lokal x di dalam fungsi fn tidak akan mempengaruhi variabel eksternal x. Artinya, keluaran peringatan di fn bukan 1, melainkan tidak terdefinisi.
Kedua, parameter formal memiliki prioritas lebih tinggi dibandingkan nama fungsi.
Copy kode kodenya sebagai berikut:
fungsi fn(fn){
peringatan(fn);
}
fn('halo'); // --> "halo"
Anda dapat melihat bahwa nama fungsi dan parameter formal memiliki nama yang sama dengan fn, dan outputnya adalah string "halo", tetapi bukan isi fungsi (fn.toString()) dari fungsi fn.
Ketiga, parameter formal memiliki prioritas lebih tinggi dibandingkan argumen.
Copy kode kodenya sebagai berikut:
fungsi fn(argumen){
peringatan(argumen);
}
fn('halo'); // --> "halo"<BR>
Objek argumentasi dapat digunakan langsung di dalam fungsi dan merupakan pengidentifikasi khusus yang disediakan oleh bahasa itu sendiri.
Di sini parameter formal dideklarasikan dengan nama yang sama. Anda dapat melihat bahwa outputnya adalah "halo" dan bukan "[Objek Objek]", yaitu argumen parameter formal mencakup argumen nyata yang disediakan oleh bahasa itu sendiri.
4. Parameter formal mempunyai prioritas lebih tinggi dibandingkan variabel lokal yang dideklarasikan tetapi tidak ditetapkan.
Copy kode kodenya sebagai berikut:
fungsi fn(a){
var a;
peringatan(a);
}
fn('halo'); // --> "halo"
Parameter formal fungsi fn adalah a. Kalimat pertama dalam fungsi hanya mendeklarasikan variabel lokal a, tetapi tidak memberikan nilai. Dari hasil outputnya adalah “hello” bukannya undefinisi, terlihat bahwa parameter formal a memiliki prioritas lebih tinggi dibandingkan variabel lokal a yang hanya dideklarasikan tetapi tidak diberi nilai.
5. Variabel lokal yang dideklarasikan dan ditetapkan mempunyai prioritas lebih tinggi dibandingkan parameter formal.
Copy kode kodenya sebagai berikut:
fungsi fn(a){
var a = 1;
peringatan(a);
}
fn('halo'); // --> "1"
Parameter formal fungsi fn adalah a. Kalimat pertama dalam fungsi hanya mendeklarasikan variabel lokal a dan memberinya nilai 1. Dari hasil keluarannya adalah "1" dan bukan "halo", kita dapat melihat bahwa variabel lokal a yang dideklarasikan dan ditetapkan memiliki prioritas lebih tinggi daripada parameter formal a.
6. Ketika parameter formal ditugaskan ke variabel lokal dengan nama yang sama
Copy kode kodenya sebagai berikut:
fungsi fn(a){
var a = a;
peringatan(a);
}
fn('halo');
Jangan dijalankan dulu, tebak hasilnya. Jika Anda mengikuti poin 5: variabel lokal yang dideklarasikan dan ditetapkan memiliki prioritas lebih tinggi daripada parameter formal. Maka a tidak akan terdefinisi. Namun pada kenyataannya a adalah "halo", yaitu a di kanan adalah parameter formal a, dan di kiri a adalah variabel lokal a.
Kedua huruf a di sini tidak saling mengganggu dan tidak menutupi satu sama lain. Hal ini bertentangan dengan apa yang baru saja saya katakan: variabel lokal yang ditetapkan memiliki prioritas lebih tinggi daripada parameter formal. Namun mesin melakukan apa yang kita inginkan, karena kita tidak ingin a tidak terdefinisi setelah var a = a.