برای گیج نشیم :
call by value :
var a=10;
function fn(b){
}
fn(a);
در واقع 10 رو که یه مقدار داخلی a است کپی کردیم تو b یعنی الان b=10 هستش مثل این میمونه که بگیم (10)fn موقع صدا زدن.
این به این دلیل است که a یه Number است که جزو fundamental type ها است و این یعنی a یه بلوک از مموری است که مقدار 10 در ان ریخته شده ولی وقتی 10 رو تو b کپی میکنیم یه بلوک جدید ساخته می شه در مموری و 10 داخل اون ریخته میشه که این بلوک کاملا با بلوک a متفاوت است پس وقتی تغییری اعمال میشه در function توسط b روی همون بلوک شخصی b انجام میشه نه a
var a_obj={
value:10;
};
function fn (b){
b.value=100;
}
fn(a_obj);
در این مثال مقدار {value:10} در محلی در مموزی ساخته میشود و ادرس ان است که داخل a موجود است نه خود object پس وقتی ما مقدار داخلی a زو در b کپی می کنیم در واقع ادرس رو در b کپی می کنیم نه {value:10}
حالا که b ادرس object رو داره مثل a, مستقیما به بلوکی که {value:10} ذخیره شده دستزسی داره تا جایی که می توان گفت b اسم دومی است برای {value:10} و هر تغییر مستقیما انجام میشه که اصطلاحا بهش میگن
call by reference
که همه اینها برمیگرده به اینکه object ها pointer base هستند یعنی با آدرس و اشاره گر کار می کنن ولی fundamental type ها مثل string Number boolean عادی هستند و اشاره گر در انها دخیل نیست
خیلی عالی ممنون که وقت گزاشتید و نوشتید امیدوارم همینجوری ادامه بدید?
سلام و وقت بخیر دوست من ، ممنون بابت توضیحات مفیدی که دادی.
یجورایی هم میشه گفت که توی call by value مقدار متغیر کپی میشه و به تابع ارسال میشه .
ولی توی call by reference آدرس پارامتر در حافظه به تابع ارسال میشه