یه توضیح کوتاه که برای call by value و call by reference که ممکنه کمک کنه

پرسیده شده
فعالیت 1688 روز پیش
دیده شده 1241 بار
1

برای گیج نشیم :

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 عادی هستند و اشاره گر در انها دخیل نیست

فایل پیوست

amir yaghoobzadeh
amir yaghoobzadeh

23 آبان 98

0
حذف شده

خیلی عالی ممنون که وقت گزاشتید و نوشتید امیدوارم همینجوری ادامه بدید?

فایل پیوست

mostafa hedayat

توسط

mostafa hedayat

23 آبان 98

حذف شده
سلام خوبی دوست عزیز ای دی تلگرامتو میدی ؟
Hamid babazadeh

24 آبان 98

0
حذف شده

سلام و وقت بخیر دوست من ، ممنون بابت توضیحات مفیدی که دادی.

فایل پیوست

محسن محمدی رهنما

توسط

محسن محمدی رهنما

24 آبان 98

1
حذف شده

یجورایی هم میشه گفت که توی call by value مقدار متغیر کپی میشه و به تابع ارسال میشه .

ولی توی call by reference آدرس پارامتر در حافظه به تابع ارسال میشه

فایل پیوست

AliMweb

توسط

AliMweb

25 آبان 98

جلسه آشنایی با پارامتر و آرگومان