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}