JavaScript | Pass By Value และ Pass By Reference ใน JavaScript

บล็อก

JavaScript | Pass By Value และ Pass By Reference ใน JavaScript

หนึ่งในหัวข้อที่สับสนที่สุดในการเขียนโปรแกรมคือการแยกแยะว่าตัวแปรถูกส่งผ่านโดยการอ้างอิงหรือด้วยค่า ใน JavaScript สิ่งต่าง ๆ แตกต่างกันเล็กน้อย ในบทความนี้ เราจะพิจารณาว่า pass by value และ pass by reference ใน Javascript
มาดูกันว่าอะไรคือค่าที่ผ่านและส่งต่อโดยการอ้างอิง ก่อนที่จะพิจารณาบริบทของจาวาสคริปต์



ผ่านตามมูลค่า:

ใน Pass by Value ฟังก์ชันจะถูกเรียกโดยการส่งผ่านค่าของตัวแปรโดยตรงเป็นอาร์กิวเมนต์ การเปลี่ยนอาร์กิวเมนต์ภายในฟังก์ชันจะไม่ส่งผลต่อตัวแปรที่ส่งผ่านจากภายนอกฟังก์ชัน






Javascript ส่งผ่านค่าเสมอ ดังนั้นการเปลี่ยนค่าของตัวแปรจะไม่เปลี่ยนค่าพื้นฐาน (สตริงหรือตัวเลข)



function callByValue(varOne, varTwo) { console.log('Inside Call by Value Method'); varOne = 100; varTwo = 200; console.log('varOne =' + varOne +'varTwo =' +varTwo); } let varOne = 10; let varTwo = 20; console.log('Before Call by Value Method'); console.log('varOne =' + varOne +'varTwo =' +varTwo); callByValue(varOne, varTwo) console.log('After Call by Value Method'); console.log('varOne =' + varOne +'varTwo =' +varTwo); output will be : --------------- Before Call by Value Method varOne =10 varTwo =20 Inside Call by Value Method varOne =100 varTwo =200 After Call by Value Method varOne =10 varTwo =20

อย่างไรก็ตาม เมื่อตัวแปรอ้างถึงอ็อบเจ็กต์ที่มีอาร์เรย์ ค่านั้นคือการอ้างอิงไปยังอ็อบเจ็กต์



ผ่านโดยอ้างอิง:

ใน Pass by Reference ฟังก์ชันจะถูกเรียกโดยการส่งผ่านการอ้างอิง/ที่อยู่ของตัวแปรโดยตรงเป็นอาร์กิวเมนต์ การเปลี่ยนอาร์กิวเมนต์ภายในฟังก์ชันจะส่งผลต่อตัวแปรที่ส่งผ่านจากภายนอกฟังก์ชัน ในวัตถุ Javascript และอาร์เรย์จะผ่านโดยการอ้างอิง






function callByReference(varObj) { console.log('Inside Call by Reference Method'); varObj.a = 100; console.log(varObj); } let varObj = {a:1}; console.log('Before Call by Reference Method'); console.log(varObj); callByReference(varObj) console.log('After Call by Reference Method'); console.log(varObj); output will be : --------------- Before Call by Reference Method {a: 1} Inside Call by Reference Method {a: 100} After Call by Reference Method {a: 100}

ดังนั้นหากเราส่งผ่านวัตถุหรืออาร์เรย์เป็นอาร์กิวเมนต์ไปยังวิธีการ ก็มีความเป็นไปได้ที่ค่าของวัตถุสามารถเปลี่ยนแปลงได้

เรียนรู้เพิ่มเติม

ขอบคุณที่อ่าน !

#javascript