اذهب إلى المحتوى

السؤال

نشر

السلام عليكم ورحمة الله .. 

ما الفرق بين Calling a function وpassing a reference  ؟؟ 

كلمتان اسمعهما كثيرا فى كورس موش حمدانى .. ولا اعرف ما الفرق .. انا اعرف ان عندما أضع () فانى هكذا استدعى الفانكشن واعرف ما معنى استدعاء الفانكشن  .. ولكن لا افهم ما معنى passing a reference لها ؟؟

passing.thumb.png.ab5a9e55e22597ce73f9403e5d9d593f.png

 

 

Recommended Posts

  • 1
نشر

Calling a function: هي عملية استدعاء الدّالة

مثل

getCommits();

و passing a reference: هو مصطلح لتمرير المصفوفات والكائنات لهذه الدالة,

وأي تغيير يحدث على المصفوفات والكائنات أثناء تنفيذ الدالة, يُطبق هذا التغيير في المصفوفة والكائن الأساسي.

وهذا المطلح عكس passing a value: ففي هذه الحالة, يتم إرسال قيمة المتغير (نص, رقم, قيمة منطقية) وأي تغيير عليه, لا يتأثر قيمة المتغير الأساسي

مثال: passing a value

function square(x) {
    x = x * x;
    return x;
}

var y = 10;
var result = square(y);

console.log(y); // 10 لم تتغير القيمة الأساسية
console.log(result); // 100 قيمة تنفيذ الدالة

passing a reference:

function turnOn(machine) {
    machine = {
        isOn: true
    };
}

var computer = {
    isOn: false
};

turnOn(computer);

console.log(computer.isOn); // true; بسبب أنّ الدالة قامت بتغيير قيمة الكائن

 

  • 1
نشر

دعنا نلقي نظرة على الفرق بين:

  • Pass by Value
  • Pass by Reference

أولاً: ما هي Pass by Value؟

يتم استدعاء الدوال عن طريق تمرير قيمة المتغير مباشرة. لا يؤثر تغيير المعطى داخل الدالة على المتغير الذي يتم تمريره من خارج الدالة. أيضًا، ضع في اعتبارك أن جافاسكريبت دائمًا تمرر بالقيمة.

// .تقوم الدالة بتغيير قيمة المعطيات
// .ولكن، بما انها تمرر بالقيمة، لن تتغير القيم خارج الدالة
function usingPassByValue( a, b ) {
	a = 1024;
	b = 512;

	console.log( `a: ${a} and b: ${b}` );
}

// Global Scope تعريف قيم في الـ
let a = 1, b = 2;

// a: 1024 and b: 512
usingPassByValue( a, b );

// ما زالت تساوي 1 كما هي
console.log( a );
// ما زالت تساوي 2 كما هي
console.log( b );

ثانياً: ما هي Pass by Reference؟

التمرير بالمرجع سيكون له تأثير على القيمة المعطاة. في جافاسكريبت، يتم تمرير الكائنات والمصفوفات عن طريق المرجع. لذلك إذا مررنا كائنًا أو مصفوفة كمعطى إلى الدالة، فهناك احتمال أن تتغير قيمة الكائن أو المصفوفة.

function usingPassByReference( user ) {
	user.isOnline = true;
}

let adam = { isOnline: false };

usingPassByReference( adam );

// isOnline تم تغيير قيمة
console.log( adam.isOnline );

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...