Pada artikel ini, kita akan melihat bagaimana javascript melewati referensi atau nilai bekerja dan perbedaan antara kedua metode tersebut Show
Daftar isi
Pengantar javascript lewat referensi dan lewat nilaiSebelum terjun ke fungsi javascript pass by reference atau pass by value, penting untuk memahami perbedaan antara primitif dan objek Nilai-nilai primitif Ini adalah nilai paling dasar yang dapat dipikirkan seseorang, yang meliputi, undefined, null, boolean, string, dan angka. Nilai primitif diteruskan oleh nilai dalam javascript Sedangkan semua objek (termasuk fungsi) dilewatkan dengan referensi dalam javascript Mari kita pahami apa itu pass by reference dan pass by value sebelum melihat contoh Javascript lulus dengan referensiDalam Pass by Reference, suatu fungsi dipanggil dengan langsung meneruskan referensi/alamat variabel sebagai argumen. Mengubah argumen di dalam fungsi memengaruhi variabel yang dikirimkan dari luar fungsi. Dalam objek dan array Javascript dilewatkan dengan referensi
Keluaran _Javascript melewati nilaiDalam javascript pass by value, fungsi dipanggil dengan langsung meneruskan nilai variabel sebagai argumen. Oleh karena itu, bahkan mengubah argumen di dalam fungsi tidak memengaruhi variabel yang dikirimkan dari luar fungsi Penting untuk dicatat bahwa dalam javascript, semua argumen fungsi selalu diteruskan dengan nilai. Yaitu, JavaScript menyalin nilai dari variabel yang lewat ke dalam argumen di dalam fungsi
Penjelasan KodeSeperti yang Anda lihat di sini, setelah kita meneruskan variabel y ke kotak fungsi, nilai y disalin ke variabel x dengan javascript (karenanya diteruskan dengan nilai) Perhatikan bahwa meneruskan argumen fungsional dengan nilai tidak berdampak pada variabel asli itu sendiri, seperti saat Anda membuat variabel baru (y dalam kasus ini) dan menetapkannya ke nilai variabel lain (x), tempat lain di memori terpisah . Jadi, berdasarkan nilai, salin nilai variabel asli (a) ke dalam dua tempat terpisah di memori Di sisi lain, dalam hal ini jika kita melewatkan variabel y dengan referensi, maka nilainya akan berubah menjadi 100, karena dalam referensi, fungsi mengambil variabel asli itu sendiri dan menggunakannya dalam fungsi daripada menggunakan salinan dari Kata-kata PerpisahanSaat membandingkan kedua fungsi, yaitu javascript pass by reference, pass by value, kita dapat melihat bahwa SEMUA objek berinteraksi dengan referensi di Javascript, jadi saat menyetel sama satu sama lain atau meneruskan ke suatu fungsi, semuanya menunjuk ke lokasi yang sama jadi saat Anda mengubah . Ini adalah perbedaan yang mencolok dibandingkan dengan nilai yang diteruskan, di mana fungsi nilai yang diteruskan menyalin nilai ke dalam dua titik terpisah dalam memori secara efektif menjadikannya entitas yang sepenuhnya terpisah meskipun satu awalnya ditetapkan sama dengan yang lain Kelas adalah template untuk membuat objek. Mereka merangkum data dengan kode untuk mengerjakan data itu. Kelas di JS dibangun di atas prototipe tetapi juga memiliki beberapa sintaks dan semantik yang unik untuk kelas Untuk contoh dan penjelasan lebih lanjut, lihat panduan Menggunakan kelas Kelas sebenarnya adalah "fungsi khusus", dan sama seperti Anda dapat mendefinisikan ekspresi fungsi dan deklarasi fungsi, kelas dapat didefinisikan dalam dua cara. ekspresi kelas atau deklarasi kelas
Seperti ekspresi fungsi, ekspresi kelas mungkin anonim, atau memiliki nama yang berbeda dari variabel yang ditugaskan padanya. Namun, tidak seperti deklarasi fungsi, deklarasi kelas memiliki batasan yang sama seperti 0 atau 1 dan berperilaku seolah-olahBadan kelas adalah bagian yang ada di dalam kurung kurawal 2. Di sinilah Anda mendefinisikan anggota kelas, seperti metode atau konstruktorBadan kelas dieksekusi dalam mode ketat bahkan tanpa direktif 3Elemen kelas dapat dicirikan oleh tiga aspek
Bersama-sama, mereka menambahkan hingga 16 kemungkinan kombinasi. Untuk membagi referensi secara lebih logis dan menghindari konten yang tumpang tindih, elemen yang berbeda diperkenalkan secara detail di halaman yang berbeda Definisi metodeMetode contoh publik Pengambil instance publik setterPembuat instance publik Bidang kelas umumBidang instance publik _4Metode statis publik, pengambil, penyetel, dan bidang Fitur kelas privatSegala sesuatu yang bersifat pribadi Catatan. Fitur pribadi memiliki batasan bahwa semua nama properti yang dideklarasikan dalam kelas yang sama harus unik. Semua properti publik lainnya tidak memiliki batasan ini — Anda dapat memiliki beberapa properti publik dengan nama yang sama, dan yang terakhir menimpa yang lain. Ini adalah perilaku yang sama seperti di Selain itu, ada dua sintaks elemen kelas khusus. dan , dengan referensi mereka sendiri KonstruktorMetode 5 adalah metode khusus untuk membuat dan menginisialisasi objek yang dibuat dengan kelas. Hanya ada satu metode khusus dengan nama "konstruktor" di kelas — 7 dilemparkan jika kelas berisi lebih dari satu kemunculan metode 5Konstruktor dapat menggunakan kata kunci _9 untuk memanggil konstruktor kelas superAnda dapat membuat properti instance di dalam konstruktor _Alternatifnya, jika nilai properti instance Anda tidak bergantung pada argumen konstruktor, Anda dapat mendefinisikannya sebagai Blok inisialisasi statisBlok inisialisasi statis memungkinkan inisialisasi fleksibel, termasuk evaluasi pernyataan selama inisialisasi, sambil memberikan akses ke ruang lingkup pribadi Beberapa blok statis dapat dideklarasikan, dan ini dapat diselingi dengan deklarasi bidang dan metode statis (semua item statis dievaluasi dalam urutan deklarasi) MetodeMetode didefinisikan pada prototipe dari setiap instance kelas dan digunakan bersama oleh semua instance. Metode dapat berupa fungsi biasa, fungsi async, fungsi generator, atau fungsi generator async. Untuk informasi lebih lanjut, lihat definisi metode
Metode dan bidang statisKata kunci 4 mendefinisikan metode atau bidang statis untuk kelas. Properti statis (bidang dan metode) didefinisikan pada kelas itu sendiri, bukan pada setiap instance. Metode statis sering digunakan untuk membuat fungsi utilitas untuk aplikasi, sedangkan bidang statis berguna untuk cache, konfigurasi tetap, atau data lain yang tidak perlu direplikasi di seluruh instance
Deklarasi lapanganDengan sintaks deklarasi bidang kelas, contohnya dapat ditulis sebagai
Bidang kelas mirip dengan properti objek, bukan variabel, jadi kami tidak menggunakan kata kunci seperti 1 untuk mendeklarasikannya. Dalam JavaScript, gunakan sintaks pengidentifikasi khusus, jadi kata kunci pengubah seperti 2 dan 3 juga tidak boleh digunakanSeperti yang terlihat di atas, field dapat dideklarasikan dengan atau tanpa nilai default. Kolom tanpa nilai default default ke 4. Dengan mendeklarasikan bidang di muka, definisi kelas menjadi lebih mendokumentasikan diri, dan bidang selalu ada, yang membantu pengoptimalanLihat kolom kelas publik untuk informasi lebih lanjut Fitur kelas privatMenggunakan bidang pribadi, definisi dapat disempurnakan seperti di bawah ini
Merupakan kesalahan untuk merujuk bidang pribadi dari luar kelas; . Dengan mendefinisikan hal-hal yang tidak terlihat di luar kelas, Anda memastikan bahwa pengguna kelas Anda tidak dapat bergantung pada internal, yang dapat berubah dari versi ke versi Bidang pribadi hanya dapat dideklarasikan di muka dalam deklarasi bidang. Mereka tidak dapat dibuat nanti dengan menetapkannya, seperti yang dapat dilakukan oleh properti normal Untuk informasi lebih lanjut, lihat fitur kelas privat Kata kunci _5 digunakan dalam deklarasi kelas atau ekspresi kelas untuk membuat kelas sebagai anak dari konstruktor lain (baik kelas atau fungsi)
Jika ada konstruktor yang ada di subkelas, ia harus memanggil 6 terlebih dahulu sebelum menggunakan 7. Kata kunci 9 juga dapat digunakan untuk memanggil metode kelas super yang sesuai
Ketika metode statis atau instance dipanggil tanpa nilai untuk 7, seperti dengan menugaskan metode ke variabel dan kemudian memanggilnya, nilai 7 akan menjadi 4 di dalam metode. Perilaku ini sama bahkan jika direktif _3 tidak ada, karena kode di dalam tubuh 3 selalu dieksekusi dalam mode ketat
Jika kita menulis ulang di atas menggunakan sintaks berbasis fungsi tradisional dalam mode non-ketat, maka 7 panggilan metode secara otomatis terikat ke 5. Dalam mode ketat, nilai _7 tetap sebagai 4
Bisakah Anda melewatkan kelas sebagai parameter dalam JavaScript?Ya, Anda bisa . Tetapi kelas itu sendiri tidak memiliki nilai apa pun dan itu hanya sebuah skema. Anda perlu membuat instance (instantiate) dari kelas dan meneruskannya sebagai argumen ke metode (fungsi) apa pun.
Bagaimana cara melewatkan nama kelas sebagai parameter dalam JavaScript?Sintaksnya adalah sebagai berikut. var elemen = dokumen. getElementsByClassName(name); Di sini “nama” adalah nama kelas yang ingin Anda temukan dan “elemen” adalah variabel yang berisi larik elemen.
Bisakah kita melewatkan objek kelas sebagai argumen fungsi dalam JavaScript?Kita dapat meneruskan objek ke fungsi JavaScript, tetapi argumen harus memiliki nama yang sama dengan nama properti Object .
Bisakah kelas menjadi parameter fungsi?class adalah kata kunci yang hanya digunakan* untuk memperkenalkan definisi kelas. Saat Anda mendeklarasikan instance kelas baru sebagai objek lokal atau sebagai parameter fungsi, Anda hanya menggunakan nama kelas (yang harus berada dalam cakupan) dan bukan kata kunci class itu sendiri. |