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

อธิบาย pass by value และ pass by reference ใน JavaScript?


ผ่านคุ้ม

ในผ่านตามค่า ฟังก์ชันถูกเรียกโดยการส่งผ่านค่าของตัวแปรโดยตรงเป็นอาร์กิวเมนต์ การเปลี่ยนอาร์กิวเมนต์ภายในฟังก์ชันจะไม่ส่งผลต่อตัวแปรที่ส่งผ่านจากภายนอกฟังก์ชัน Javascript ส่งต่อตามค่า . เสมอ ดังนั้นการเปลี่ยนค่าของตัวแปรจะไม่เปลี่ยนค่าพื้นฐาน (สตริงหรือตัวเลข)

ในตัวอย่างต่อไปนี้ ตัวแปร 'a' ได้กำหนดค่า 1 แต่ภายในฟังก์ชัน 'change' มันถูกกำหนดค่าด้วยค่า 2 เนื่องจาก javascript เป็น ส่งผ่านค่า เสมอ เอาต์พุตที่แสดงจะเป็น '1' แต่ไม่ใช่ '2'

ตัวอย่าง

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

ผลลัพธ์

1

ผ่านโดยการอ้างอิง

มีบางกรณีที่ส่งผ่านที่อยู่แทนการโต้แย้งเพื่อเรียกใช้ฟังก์ชัน ในขณะนั้น การเปลี่ยนค่าภายในฟังก์ชันจะส่งผลต่อตัวแปรที่ส่งผ่านจากภายนอกฟังก์ชัน สิ่งนี้เรียกว่า ผ่านโดยการอ้างอิง . ในจาวาสคริปต์ส่วนใหญ่อาร์เรย์และอ็อบเจ็กต์จะตาม ส่งผ่านโดยการอ้างอิง

ในตัวอย่างต่อไปนี้ วัตถุชื่อ 'a' ถูกประกาศนอกฟังก์ชัน 'เปลี่ยนแปลง' ในที่นี้ เราควรสังเกตว่าตัวแปร 'a' กลายพันธุ์แต่ไม่ได้กำหนดค่า 2 ดังที่แสดงในตัวอย่างที่ 2 ผ่านโดยการอ้างอิง เกิดขึ้นเมื่อ กลายพันธุ์ ได้เกิดขึ้น.

ตัวอย่าง-1

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


ในตัวอย่างต่อไปนี้แทน การกลายพันธุ์ , ตัวแปร 'a' ได้ กำหนด ด้วยค่า 2 ดังนั้น ส่งต่อค่า เกิดขึ้นและจะไม่มีผลกระทบต่อตัวแปรภายนอก

ตัวอย่าง-2

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