Dalam JavaScript, semua pembolehubah diluluskan mengikut nilai, yang bermaksud salinan nilai asal dibuat dan dihantar ke fungsi. Walau bagaimanapun, apabila nilai ialah objek, seperti tatasusunan atau literal objek, salinan tersebut adalah rujukan kepada objek asal.
function f(a, b, c) { a = 3; // Reassignment changes the local variable only. b.push("foo"); // Property change affects the original object. c.first = false; // Property change affects the original object. } const x = 4; let y = ["eeny", "miny", "mo"]; let z = { first: true }; f(x, y, z); console.log(x, y, z.first); // Output: 4, ["eeny", "miny", "mo", "foo"], false
Dalam contoh di atas, perubahan pada objek b dan c ialah dicerminkan dalam objek asal, manakala penugasan semula a tidak mempunyai kesan.
Contoh Mendalam:
function f() { const a = ["1", "2", { foo: "bar" }]; const b = a[1]; // Copy the reference to the original array element a[1] = "4"; // Change the value in the original array console.log(b); // Output: "2" (Original value of the copied reference) }
Dalam contoh pertama, walaupun a mempunyai telah diubah suai, b masih memegang nilai asal kerana ia adalah salinan rujukan.
function f() { const a = [{ yellow: "blue" }, { red: "cyan" }, { green: "magenta" }]; const b = a[1]; // Copy the reference to the original object a[1].red = "tan"; // Change the property in the original object console.log(b.red); // Output: "tan" (Property change is reflected in both variables) b.red = "black"; // Change the property through the reference console.log(a[1].red); // Output: "black" (Property change is reflected in both variables) }
Dalam contoh kedua, perubahan kepada a[1].red mempengaruhi kedua-dua a dan b kerana ia berkongsi rujukan objek yang sama.
Untuk mencipta salinan bebas sepenuhnya bagi objek, anda boleh menggunakan kaedah JSON.parse() dan JSON.stringify() untuk menyahsiri dan mensirikan objek masing-masing. Contohnya:
const originalObject = { foo: "bar" }; const independentCopy = JSON.parse(JSON.stringify(originalObject));
Atas ialah kandungan terperinci Bagaimanakah JavaScript Mengendalikan Pass-by-Value dan Pass-by-Reference dengan Jenis dan Objek Primitif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!