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

Pass by Value และ Pass by Reference ใน JavaScript

Pass by Value

ใน Pass by Value ฟังก์ชันถูกเรียกโดยส่งค่าของตัวแปรโดยตรง การเปลี่ยนค่า argument ภายในฟังก์ชันไม่ส่งผลต่อตัวแปรภายนอก JavaScript เป็น Pass by Value เสมอสำหรับ Primitive types (String, Number) การเปลี่ยนค่าตัวแปรไม่เปลี่ยนค่า Primitive ดั้งเดิม

ตัวอย่าง: ตัวแปร 'a' = 1 แต่ในฟังก์ชัน 'change' กำหนดเป็น 2 เนื่องจาก JS เป็น pass by value ผลลัพธ์คือ 1 ไม่ใช่ 2

ตัวอย่าง

<html> <body> <script> 
    let a = 1; 
    let change = (val) => { 
        val = 2; 
    } 
    change(a); 
    document.write(a); 
</script> </body> </html>

ผลลัพธ์

1

Pass by Reference

บางกรณีส่ง address (reference) แทนค่า การเปลี่ยนค่าภายในฟังก์ชันจะส่งผลต่อตัวแปรภายนอก เรียกว่า Pass by Reference ใน JS Arrays และ Objects ใช้ pass by reference

ตัวอย่าง: ออบเจ็กต์ 'a' ประกาศนอกฟังก์ชัน 'change' ตัวแปร 'a' ถูก mutate (เปลี่ยน property) ไม่ได้ assign ใหม่ Pass by reference เกิดขึ้นเมื่อมี mutation

ตัวอย่างที่ 1 - Mutation

<html> <body> <script> 
    let a = {num: 1}; 
    let change = (val) => { 
        val.num = 2; 
    } 
    change(a); 
    document.write(JSON.stringify(a)); 
</script> </body> </html>

ผลลัพธ์

{"num":2}

ตัวอย่างที่ 2 - Assignment (ไม่ใช่ Mutation)

<html> <body> <script> 
    let a = {num: 1}; 
    let change = (val) => { 
        val = {num: 2}; 
    } 
    change(a); 
    document.write(JSON.stringify(a)); 
</script> </body> </html>

ผลลัพธ์

{"num":1}