1. Lewati berdasarkan nilai (berdasarkan nilai)
Nilai variabel disalin dan tidak ada hubungannya dengan nilai asli. Artinya, meskipun nilai baru diubah, nilai asli tidak akan berubah. Dalam JavaScript, tipe dasar diteruskan berdasarkan nilai.
Copy kode kodenya sebagai berikut:
fungsi tesPassValue()
{
varm=1;
var n=2;
//Salin nilai m dan n dan teruskan ke passValue
nilai pass(m,n);
alert(m); //akan menjadi nilai aslinya
}
fungsi passValue(a,b)
{
a = a+b; //Ubah nilai a, di sini a hanyalah salinan dari nilai aslinya
peringatan(a);
}
Hasil keluaran:
3
1
2. Dengan referensi.
Salinan referensi itu sendiri diteruskan ke fungsi. Objek yang ditunjuk oleh referensi tidak disalin dan diteruskan (hal yang sama berlaku di Java), jika nilai atribut objek diubah, sejak aslinya referensi menunjuk ke objek yang sama, Oleh karena itu, nilai yang dimodifikasi akan diakses melalui referensi asli;
Namun jika Anda hanya mengarahkan referensi ke objek baru di fungsi tersebut, nilai objek asli tidak akan berubah, hanya referensi yang disalin yang akan diubah.
Copy kode kodenya sebagai berikut:
fungsi tesPassValue()
{
var tanggal = Tanggal baru(2006,02,27);
alert(date.getDate()); //Hasilnya adalah 27
//Salin referensi tanggal itu sendiri dan berikan ke passReference. Perhatikan bahwa objek yang ditunjuk berdasarkan tanggal belum disalin.
passReference(tanggal);
alert(date.getDate()); //Hasilnya adalah 12
//Sama seperti di atas
ubahReferensi(tanggal);
alert(date.getDate()); //Outputnya masih 12
}
fungsi passReference(da)
{
//Karena da dan referensi asli menunjuk ke objek yang sama, di luar fungsi, apa yang diakses melalui referensi asli akan menjadi nilai atribut tanggal dari objek tersebut, yang akan menjadi nilai yang dimodifikasi.
da.setDate(12);
}
Referensi perubahan fungsi(da)
{
//Saat ini, referensi da sebenarnya merupakan salinan dari referensi asli. Menugaskan ulang referensi itu sendiri tidak akan mempengaruhi referensi asli.
da= Tanggal baru(2007,05,11);
//Arahkan referensi da ke objek baru. Saat ini, referensi asli masih menunjuk ke objek asli.
alert(da.getDate()); // Outputnya adalah 11
}
3 Senar khusus
Dalam JavaScript, String juga diteruskan dengan referensi. Hanya ada metode charAt di js, tetapi tidak ada metode modifikasi yang sesuai. Ini sama dengan String di java dan tidak dapat diubah.
Copy kode kodenya sebagai berikut:
var s1 = "halo";
var s2 = "neraka" + "o";
jika (s1 == s2)
alert("s1 = s2"); //Apakah kalimat ini akan dieksekusi? Orang yang familiar dengan Java mungkin mengira kalimat ini tidak akan dieksekusi (Saya cukup kritis terhadap kalimat ini, kalimat ini juga dieksekusi di Java!), karena di Java == membandingkan identitas. Faktanya, String== di js membandingkan apakah nilainya sama, jadi kalimat ini akan dieksekusi. Tetapi untuk Object == lainnya perbandingannya sama seperti di Java.