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

السؤال

نشر

 

//What is the difference between sayHello and sayHello();
function sayHello() {
  return "Hello World";
}

let text = sayHello;

ما الفرق بين 

function sayHello() {
  return "Hello World";
}

let text = sayHello();

 

Recommended Posts

  • 0
نشر

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

sayHello بدون أقواس يخصّص الدالة نفسها (مرجع إليها) للمتغير text، أي أن text أصبح اسما آخر لنفس الدالة، ويمكنك لاحقا استدعاؤها ب text().

أما sayHello() بالأقواس فهو ينفّذ الدالة فورا ويخصّص القيمة المعادة ("Hello World") للمتغير text، فيصبح text مجرد نص وليس دالة.

  • 0
نشر

وعليكم السلام ورحمة الله تعالى وبركاته،

في JavaScript، الدالة هي قيمة كأي قيمة أخرى مثل الأرقام والنصوص، فعندما تكتب let text = sayHello بدون أقواس، فأنت تخزن الدالة نفسها في text، وهذا يعني أن text أصبح مؤشرا يشير إلى نفس الكتلة البرمجية في الذاكرة، ويمكنك تنفيذها لاحقا بكتابة text(). أما عندما تكتب let text = sayHello() بالأقواس، فالمحرك ينفّذ الدالة فورا ويأخذ القيمة التي أرجعتها return وهي "Hello World"، ويخزّنها في text، فيصبح text من نوع string وليس function، ولو حاولت استدعاءه ب text() ستحصل على TypeError لأنك تحاول تنفيذ نص كأنه دالة.

  • 0
نشر

بدون اقواس فانك تضع الدالة في متغير اخر اى يمكن استدعائها بالمتغير الجديد.

اما بالاقواس فانت تستدعيها وتعيد النتيجة لهذا المتغير 

  • 0
نشر

بالإضافة للتعليقات السابقة فالفرق الجوهري يظهر بشكل عملي عند التعامل مع الأحداث (Events) أو (Timers)، مثلاً بدون أقواس sayHello: نستخدمها عندما نريد للمتصفح أو للنظام أن يستدعي الدالة لاحقاً. في بيئات مثل React أو حتى JavaScript ، نكتب button.addEventListener('click', sayHello) أو onClick={sayHello}. نحن هنا نسلم "عنوان" الدالة ليتم استدعاؤها فقط عند حدوث النقر.

أيضاً في ال Higher-Order Functions والقدرة على كتابة let text = sayHello هي حجر الأساس للبرمجة الوظيفية في JavaScript. حيث يسمح لنا بتمرير الدوال كمعاملات (Arguments) لدوال أخرى دون تنفيذها مسبقاً، مثل التوابع الخاصة بالمصفوفات:

// هنا نمرر مرجع الدالة ليتم تنفيذها تباعاً على كل عنصر
[1, 2, 3].map(sayHello);

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...