Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

อธิบายจาวาสคริปต์ผ่านการอ้างอิงในจาวาสคริปต์หรือไม่


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 และเปลี่ยนสถานะภายในของอ็อบเจ็กต์นั้น ทำให้เกิดการเปลี่ยนแปลงในวัตถุเดิม