Dalam konsep -konsep tradisional, diyakini bahwa fungsi JavaScript melewati lewat referensi (juga disebut pointer passing), dan beberapa orang percaya bahwa kedua nilai lewat dan referensi tersedia. Jadi apa yang terjadi dengan parameter JS yang lewat? Faktanya, demonstrasi berikut dapat digunakan di Java
Pertama, mari kita dapatkan jenis pengiriman dasar yang lebih sederhana:
fungsi add (num) {num+= 10; return num;} num = 10; waspada (add (num)); aelrt (num); // output 20,10Untuk output 20 dan 10 di sini, sesuai dengan penjelasan resmi JS, tindakan penyalinan dilakukan ketika parameter tipe dasar dilewati, sehingga variabel variabel yang dinyatakan secara eksternal dan parameter fungsi NUM memiliki nilai yang persis sama, tetapi memiliki alamat parameter yang sama sekali berbeda. Tidak ada yang saling kenal, dan parameter fungsi NUM Stack Frame muncul ketika panggilan fungsi kembali. Oleh karena itu, mengubah parameter fungsi NUM tidak berpengaruh pada variabel eksternal asli.
Mari kita lihat lulus tipe referensi objek yang lebih kompleks:
fungsi setName (obj) {obj.name = "ted";} var obj = objek baru (); setName (obj); waspada (obj.name); // output tedInti dari kode di atas adalah: Buat objek objek, tetapkan referensi ke OBJ (dalam C, secara langsung merupakan penugasan alamat memori), dan kemudian ketika meneruskan parameter fungsi, saya melakukan hal yang sama seperti metode sebelumnya, menyalin bingkai tumpukan ke objek yang dipanggil oleh objek objek), dan keduanya memiliki nilai yang sama (mungkin tidak dipanggil sebagai objek objek), dan kemudian pada suatu objek objek) ketika Nilai Nilai Nilai Nilai Nilai Nilai Nilai Nilai Nilai Nilai Nilai Nilai Nilai Nilai Nilai Nilai), dan kemudian. Java), dan setelah perubahan selesai, bingkai tumpukan yang sesuai dengan parameter fungsi OBJ juga harus muncul.
Oleh karena itu, output yang sesuai adalah nilai objek objek setelah berubah
Kemudian beberapa teman mungkin bertanya, ini juga dapat dipahami sebagai Pass Referensi (Pointer Pass)? Tidak, secara ketat, dalam bahasa yang mirip dengan Java, tidak ada petunjuk. Di Java, proses di atas disebut proses parsing dari referensi simbolik ke referensi langsung. Dalam C, pointer adalah tipe dengan panjang tetap (2 byte di sebagian besar kompiler C), tetapi dalam bahasa Java yang serupa, referensi juga memiliki sifat dan metode mereka sendiri, tetapi Anda tidak dapat secara langsung mengakses dan mengendalikannya, jadi itu juga merupakan objek dalam arti. Mekanisme ini juga sangat menghindari kebocoran memori, dan istilah ini disebut mekanisme akses terstruktur memori.
Untuk membuktikan titik di atas, contoh di atas sedikit dimodifikasi:
fungsi setName (obj) {obj.name = "ted"; obj = objek baru (); obj.name = "mary";} var obj = objek baru (); setName (obj); waspada (obj.name); // output tedSatu -satunya perbedaan antara contoh ini dan contoh sebelumnya adalah bahwa objek baru ditetapkan ke parameter fungsi OBJ, sehingga parameter fungsi OBJ dan parameter OBJ referensi asli memiliki nilai dan alamat memori yang sama sekali berbeda.
Artikel di atas secara singkat berbicara tentang apakah lewat parameter fungsi JavaScript adalah lewat nilai atau lewat referensi adalah semua konten yang telah saya bagikan dengan Anda. Saya harap ini dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.