معاملات الدالة
في الدرس السابق غلّفتَ الخطوات تحت اسم؛ وبقيت الأقواس فارغة. البرامج الحقيقية تحتاج مدخلات — اسماً، مجاميع، رسالة — حتى يعمل الجسم نفسه بقيم مختلفة. تلك الفتحات المسماة هي المعاملات (parameters). والقيم التي تمرّرها عند الاستدعاء هي الوسائط (arguments).
المعامل والوسيط
عندما تكتب function greet(name) { … } يكون name معاملاً: اسماً محلياً داخل الجسم. وعندما تكتب greet("Sara") تكون "Sara" وسيطاً: القيمة الفعلية التي تملأ تلك الفتحة لهذه الاستدعاء. وصفة واحدة، مكونات مختلفة.
أين يُكتب كل شيء
📊 المعامل مقابل الوسيط
| الفكرة | أين تكتبها | مثال يومي |
|---|---|---|
| المعامل | داخل () عند التعريف |
وعاء فارغ عليه ملصق name |
| الوسيط | داخل () عند الاستدعاء |
الطعام الذي تصبّه — "Sara" |
| الترتيب | من اليسار لليمين | الوسيط الأول → المعامل الأول |
| الافتراضي | name = "friend" في التعريف |
الوعاء فيه احتياطي إن لم تجلب شيئاً |
| فتحة ناقصة | استدعاء بعدد أقل | يصبح المعامل undefined ما لم يوجد افتراضي |
المعاملات على التعريف. الوسائط تظهر مع كل استدعاء. خلط الكلمتين خطأ شائع للمبتدئين — أبقِ الجدول قريباً حتى تثبت العادة.
function greet(name) {
console.log("Hello, " + name);
}
greet("Sara");
مدخل واحد، فتحة واحدة
name ينتظر داخل greet. الاستدعاء يمرّر "Sara". الجسم يبني Hello, Sara ويطبعه. غيّر الوسيط وأبقِ الجسم — هذه فائدة المعاملات.
function add(a, b) {
console.log(a + b);
}
add(3, 4);
فتحتان، قيمتان
اكتب المعاملات بفواصل: a, b. مرّر الوسائط بنفس الترتيب: 3 إلى a و4 إلى b. السجل يظهر 7. الجسم لا يثبّت هذه الأرقام — الاستدعاء يوفّرها.
function label(color, surface) {
console.log(color + " on " + surface);
}
label("red", "wall");
label("wall", "red");
الترتيب هو العقد
الاستدعاء الأول يطبع red on wall. والثاني wall on red — نفس الدالة، وسائط متبادلة. JavaScript لا يخمن أي قيمة «تشبه» لوناً. الموضع يقرر.
function greetFriend(name = "friend") {
console.log("Hi, " + name);
}
greetFriend("Ali");
greetFriend();
قيمة احتياطية عند الغياب
name = "friend" يضع افتراضياً. greetFriend("Ali") يستخدم "Ali". وgreetFriend() بأقواس فارغة يستخدم "friend". الافتراضي يحمي الجسم عندما يتخطى المستدعي فتحة.
function showId(id) {
console.log(id);
}
showId();
بلا قيمة وبلا افتراضي
showId() لا يمرّر شيئاً إلى id. بلا افتراضي يصبح id هو undefined ويُطبع كذلك. ليس تعطلاً — إشارة أنك نسيت وسيطاً أو تحتاج افتراضياً.
مرّر نصاً إلى الصفحة
نفس نمط DOM السابق، لكن الرسالة تُبنى من الوسيط. دالة واحدة ترحّب بضيوف مختلفين — يتغير الاستدعاء فقط. عرض HTML أدناه يفعل ذلك تماماً.
أظهر المعاملات على الصفحة
عرّف دالة تأخذ اسم الضيف، اكتب ترحيباً قصيراً في فقرة، ثم استدعِها بنص حقيقي.
<!DOCTYPE html>
<html>
<head>
<title>parameters — page</title>
</head>
<body>
<p id="msg">…</p>
<script>
function welcome(guest) {
let box = document.getElementById("msg");
box.textContent = "Hello, " + guest;
}
welcome("Omar");
</script>
</body>
</html>
الصفحة تعرض Hello, Omar. guest كان المعامل؛ "Omar" كان الوسيط. غيّر النص في الاستدعاء فقط، حدّث الصفحة، واقرأ السطر الجديد. الدرس التالي عن return — إخراج قيمة من الدالة.
جرّب بنفسك
- اكتب
function hello(name)تطبع"hi "معname، ثم استدعِها باسمك. - اكتب
function sum(x, y)تطبعx + y، ثم استدعِها برقمين. - استدعِ دالة بمعاملين مرتين مع عكس الوسائط وقارن السجلات.
- أضف افتراضياً مثل
title = "guest"واستدعِ مرة بقيمة ومرة بـ()فارغ. - استدعِ دالة بمعامل واحد بلا وسيط وبلا افتراضي؛ تأكد من
undefinedفي وحدة التحكم. - في عرض HTML غيّر نص الوسيط فقط، حدّث، واقرأ الفقرة.
أخطاء شائعة
- استدعاء بـ
()فارغ والجسم يحتاج قيمة — تحصل علىundefinedما لم يوجد افتراضي - عكس ترتيب الوسائط وتوقع أن JavaScript «يعرف» أيها لأيها
- خلط المعامل (التعريف) مع الوسيط (الاستدعاء)
- نسيان الفاصلة بين معاملين أو وسيطين
- البحث عن قيمة مُرجَعة هنا — ذلك الدرس التالي؛ هذه الصفحة عن المدخلات فقط
ملخص
- المعاملات أسماء داخل
()التعريف - الوسائط قيم تمرّرها عند الاستدعاء
- الترتيب من اليسار لليمين — الأول مع الأول، الثاني مع الثاني
- الافتراضي يملأ الفتحة عندما يتخطاها المستدعي
- الفتحة الناقصة بلا افتراضي تصبح
undefined - تحديث الصفحة يمكن أن يستخدم القيمة الممرّرة في الرسالة
- التالي: return — أرسل نتيجة من الدالة إلى الخارج
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى