Rumah >hujung hadapan web >tutorial js >Bagaimanakah Mekanisme Pas-demi-Nilai JavaScript Mempengaruhi Pembolehubah Primitif dan Objek dalam Fungsi?

Bagaimanakah Mekanisme Pas-demi-Nilai JavaScript Mempengaruhi Pembolehubah Primitif dan Objek dalam Fungsi?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-18 04:34:17224semak imbas

How Does JavaScript's Pass-by-Value Mechanism Affect Primitive and Object Variables in Functions?

Memahami Pass by Rujukan JavaScript vs. Pass by Value

Dalam JavaScript, parameter yang dihantar kepada fungsi sentiasa diluluskan oleh nilai. Ini bermakna salinan nilai asal dibuat dan nilai asal tidak terjejas oleh sebarang perubahan yang dibuat pada salinan. Walau bagaimanapun, apabila nilai ialah objek (termasuk tatasusunan), salinan yang dibuat adalah rujukan kepada objek asal.

Konsep ini mempengaruhi kelakuan pembolehubah apabila ia diubah suai dalam fungsi:

  • Nilai primitif (cth., nombor, rentetan): Apabila nilai primitif diluluskan sebagai hujah dan diubah suai dalam fungsi, nilai asal di luar fungsi kekal tidak berubah.
  • Objek (cth., tatasusunan, objek): Apabila objek diluluskan sebagai hujah dan diubah suai dalam fungsi, objek asal di luar fungsi itu juga diubah suai. Ini kerana walaupun fungsi menerima salinan objek asal, ia sebenarnya merujuk kepada objek asas yang sama dalam ingatan. Mengubah suai sifat objek yang dirujuk dalam fungsi, oleh itu, mempengaruhi objek asal di luar fungsi.

Contohnya:

function f(a, b, c) {
    a = 3; // Re-assigns a to a new primitive value
    b.push("foo"); // Adds a new property to b, modifying the referenced object
    c.first = false; // Modifies a property of the referenced object
}

Dalam contoh ini, x, y, dan z di luar fungsi akan mempunyai nilai berikut: x kekal tidak berubah pada 4 (nilai primitif), y kini mempunyai sifat tambahan ["foo"] (sifat objek ditambah), dan z.first ditetapkan kepada palsu (sifat objek diubah suai).

Untuk mencipta salinan bebas sepenuhnya objek, anda perlu menyalin secara eksplisit semua sifatnya ke objek baharu. Ini boleh dilakukan menggunakan kaedah Object.assign() atau dengan melintasi objek dan mencipta objek baharu dengan sifat baharu berdasarkan yang lama.

Atas ialah kandungan terperinci Bagaimanakah Mekanisme Pas-demi-Nilai JavaScript Mempengaruhi Pembolehubah Primitif dan Objek dalam Fungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn