04/02/2024
JavaScript ဟာ pass-by-value လား pass-by-reference လားမေးရင် pass-by-value language အမျိုးအစားဖြစ်ပါတယ်။ သူ့မှာ မှတ်သားစရာလေးတွေ ရှိပါတယ်။ primitive data type ( numbers, strings, booleans, null, undefined) တွေ ကို function ဆီ passing လုပ်တဲ့ အခါ value အနေနဲ့ ပေးလိုက်မှာ ဖြစ်ပါတယ်။
pass-by-value မှာ တကယ့်တန်ဖိုးကို function ဆီ ပေးပို့လိုက်ပေမယ့် function ထဲက ပြောင်းသွားတဲ့ parameter တန်ဖိုးတွေကတော့ function အပြင်ဘက်က မူရင်းတန်ဖိုးတွေအပေါ် effect ဖြစ်သွားမှာ မဟုတ်ပါဘူး။
function modifyValue(value) {
value = 42;
}
let x = 10;
modifyValue(x);
console.log(x); // Output: 10 (unchanged)
ဒီပုံစံမှာ function ထဲက parameter တန်ဖိုးကို 42 လို့ ပြောင်းလိုက်ပေမယ့် အပြင်က မူလ တန်ဖိုး 10 ကို ပြောင်းလဲနိုင်ခြင်း မရှိပါဘူး။
ဒါပေမယ့် objects တွေကို function တွေဆီ ပေးပို့တဲ့ အခါမှာတော့ memory ထဲက object အတွက် reference ကိုပဲ value အနေနဲ့ ပို့ပါတယ်။ ဒါကြောင့် function ထဲက object properties တွေ တန်ဖိုးပြောင်းသွားရင် function အပြင်ဘက်က မူရင်း object properties တန်ဖိုးတွေပါ ပြောင်းသွားပါတယ်။ သို့သော် parameter value ကို object သစ် အဖြစ် ပြန်သတ်မှတ်လိုက်မယ်ဆိုရင်တော့ function အပြင်ဘက်က မူလ object အပေါ် သက်ရောက်မှု ရှိမှာ မဟုတ်ပါဘူး။ တန်ဖိုးတော့ ပြောင်းအောင် သတ်မှတ်လိုက်လို့ရပေမယ့် အသစ်တော့ ပြန်သတ်မှတ်လို့ မရတဲ့ သဘောပါ။
function modifyObject(obj) {
obj.property = "modified";
obj = { newProperty: "new value" };
}
let myObject = { property: "original value" };
modifyObject(myObject);
console.log(myObject.property); // Output: "modified"
အကျဥ်းအားဖြင့် javaScript ဟာ pass-by-value ဖြစ်ပြီး တကယ့်တန်ဖိုးတွေကို function တွေဆီ ပေးပို့ပါတယ်။ object အနေနဲ့ value ပေးပို့မယ်ဆိုရင်တော့ memory ထဲက object reference ကိုပဲ ပေးပို့မှာပါ။ reference ကို ပေးပို့တဲ့ အတွက် function အပြင်က တန်ဖိုး အပေါ်မှာပါ ပြောင်းလဲမှုရှိပါတယ်။ complex data structures တွေကို ကိုင်တွယ်ရတဲ့ အခါ ဒီသဘောကို နားလည်ထားဖို့ အရေးကြီးပါတယ်။
အဆင်ပြေကြပါစေ။
Ko Aung Naing Phyo (SGB)
Feb 4, 2024.