Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

Pass by Reference ใน JavaScript ทำงานยังไง?

JavaScript เป็นภาษา pass by value แต่สำหรับออบเจ็กต์ ค่าคือ reference ของมัน ดังนั้นเช่น ถ้าส่ง int ไปฟังก์ชันเป็น parameter และเพิ่มค่าในฟังก์ชัน ค่าใน caller's context จะไม่เปลี่ยน

ตัวอย่าง

let i = 0; function increment(x) {    x = x + 1    console.log(x) } increment(i) console.log(i)

ผลลัพธ์

1 0

เมื่อส่งออบเจ็กต์และอัปเดต reference ของมันในฟังก์ชัน จะไม่ส่งผลต่อออบเจ็กต์ แต่ถ้า mutate internal ของออบเจ็กต์ จะสะท้อนกลับไปที่ออบเจ็กต์เดิม

ตัวอย่าง

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' }

สังเกตว่าการเปลี่ยน reference ของออบเจ็กต์ไม่ส่งผลต่อออบเจ็กต์ ตัวแปร x ถูก reassign ในฟังก์ชันที่สอง y อ้างอิง obj เดียวกันและ mutate internal state ทำให้ออบเจ็กต์เดิมเปลี่ยน