Javascript เป็นภาษาที่มีค่าผ่าน แต่สำหรับอ็อบเจ็กต์ ค่าคือการอ้างอิง ตัวอย่างเช่น หากคุณส่ง int ไปยังฟังก์ชันเป็นพารามิเตอร์และเพิ่มค่าในฟังก์ชัน ค่าของฟังก์ชันจะไม่ได้รับการอัปเดตในบริบทของผู้โทร -
ตัวอย่าง
let i = 0; function increment(x) { x = x + 1 console.log(x) } increment(i) console.log(i)
ผลลัพธ์
1 0
เมื่อคุณส่งผ่านวัตถุและอัปเดตการอ้างอิงของวัตถุนั้นในบริบทของฟังก์ชัน สิ่งนั้นจะไม่ส่งผลต่อวัตถุ แต่ถ้าคุณกลายพันธุ์ภายในของวัตถุ สิ่งนั้นจะสะท้อนให้เห็นในวัตถุ
ตัวอย่าง
let obj = {'foo': 'bar'}; function updateRef(x) { // x's local ref gets updates, doesn't affect obj x = {} } function addHelloWorld(y) { // Add new prop to object referenced by y y['hello'] = 'world'; } console.log(obj) updateRef(obj) console.log(obj) addHelloWorld(obj) console.log(obj)
ผลลัพธ์
{ foo: 'bar' } { foo: 'bar' } { foo: 'bar', hello: 'world' }
โปรดทราบว่าการเปลี่ยนแปลงการอ้างอิงวัตถุไม่มีผลกับวัตถุ ตัวแปรโลคัล x ถูกกำหนดใหม่ อย่างไรก็ตาม ในฟังก์ชันที่สอง y กำลังอ้างอิงอ็อบเจ็กต์ obj และเปลี่ยนสถานะภายในของอ็อบเจ็กต์นั้น ทำให้เกิดการเปลี่ยนแปลงในวัตถุเดิม