الانتقال إلى المحتوى الرئيسي
الوحدة 4 · الدرس 3 من 415/32 في الدورة~12 min
دروس الوحدة (3/4)

المعلمات الافتراضية والراحة

يتيح لك JavaScript إنشاء معلمات اختيارية (بقيمة افتراضية) واقبل عددًا متغيرًا من الوسائط باستخدام عامل التشغيل الباقي (...).

المعلمات الافتراضية

JS
function saluta(nome, prefisso = 'Ciao') {
  return `${prefisso}, ${nome}!`;
}

saluta('Anna'); // 'Ciao, Anna!'
saluta('Marco', 'Buongiorno'); // 'Buongiorno, Marco!'

ينطبق الإعداد الافتراضي فقط عندما تكون الوسيطة undefined (بما في ذلك الحالة "لم يتم تمريرها"). بالنسبة إلى null أو 0 لا يتم تفعيل الإعداد الافتراضي:

JS
function f(x = 10) {
  return x;
}
f(); // 10
f(undefined); // 10
f(null); // null
f(0); // 0

الباقي: ...names

لقبول عدد متغير من الوسائط، اجمعها في مصفوفة باستخدام ...:

JS
function somma(...numeri) {
  let totale = 0;
  for (const n of numeri) totale += n;
  return totale;
}

somma(); // 0
somma(5); // 5
somma(1, 2, 3, 4); // 10

داخل الدالة، numeri عبارة عن مصفوفة حقيقية (ليست الكائن السحري arguments للوظائف القديمة).

الباقي يجب أن يكون المعلمة الأخيرة:

JS
function f(primo, ...altri) {
  /* ok */
}
// function f(...altri, ultimo) {} // SyntaxError

ينتشر في وقت المكالمة

الوجه الآخر لـ ... هو عامل التشغيل spread، الذي "يقسم" المصفوفة إلى وسائط منفصلة في وقت الاتصال:

JS
function somma(a, b, c) {
  return a + b + c;
}

const nums = [1, 2, 3];
somma(...nums); // 6, equivalent to somma(1, 2, 3)

جربه

تمرين#js.m4.l3.e1
المحاولات: 0جارٍ التحميل…

حدّد دالة `sum(a, b)` حيث تكون القيمة الافتراضية لـ`b` هي 0. ويجب أن تمرر هذه التأكيدات: sum(5) === 5, sum(2, 3) === 5, sum(0) === 0.

جارٍ تحميل المحرر…
إظهار التلميح

دالة مجموع (أ، ب = 0) {إرجاع أ + ب؛ }

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#js.m4.l3.e2
المحاولات: 0جارٍ التحميل…

حدّد دالة `mean(...nums)` تُرجع المتوسط ​​الحسابي لوسيطاتها، أو 0 إذا لم يتم تمرير أي منها.

جارٍ تحميل المحرر…
إظهار التلميح

إذا كان nums.length يساوي 0، فسيتم إرجاع 0؛ وإلا الجمع والقسمة.

الحل متاح بعد 3 من المحاولات