إرجاع القيمة
في الدرس السابق أرسلتَ قيماً إلى داخل الدالة. البرامج الحقيقية تحتاج غالباً قيمة خارجة أيضاً — مجموع، تسمية، نعم/لا — حتى يكمل المستدعي العمل بالنتيجة. الكلمة التي تُرجع تلك النتيجة هي return.
ماذا يفعل return
داخل جسم الدالة تكتب return expression;. تحسب JavaScript التعبير، تسلّم القيمة للمستدعي، وتنهي ذلك الاستدعاء. يمكن للمستدعي حفظها: let total = add(3, 4); — هنا يصبح total مساوياً لـ 7.
return ليس مثل الطباعة
📊 return مقابل console.log
| الفكرة | ماذا يفعل | من يراه |
|---|---|---|
return value |
يرسل value للمستدعي |
سطر الكود التالي لديك |
console.log(value) |
يطبع value في وحدة التحكم |
من يراقب وحدة التحكم |
| كلاهما | يمكنك الطباعة والإرجاع معاً | الطباعة للعين؛ return للبرنامج |
بلا return |
ينتهي الاستدعاء بـ undefined |
حفظ الاستدعاء يعطي undefined |
بعد return |
تُتخطى الأسطر اللاحقة في ذلك الاستدعاء | الخروج المبكر مقصود |
الطباعة تساعدك على الاطلاع. الإرجاع يتيح لبقية البرنامج استخدام الجواب. المبتدئون غالباً يطبعون داخل الدالة ثم يتعجبون لماذا let x = f() يساوي undefined — لأنه لم يُرجَع شيء.
function add(a, b) {
return a + b;
}
let total = add(3, 4);
console.log(total);
التقط النتيجة
add لا تطبع بنفسها. هي تُرجع 7. المستدعي يخزّن ذلك في total ثم يطبع. غيّر الوسائط وأبقِ الجسم — المجموع المُرجَع يتبع المدخلات.
function greet(name) {
return "Hello, " + name;
}
let line = greet("Sara");
console.log(line);
ابنِ قيمة للاستخدام لاحقاً
greet تبني سلسلة وتُرجعها. line يحمل Hello, Sara. يمكنك تمرير line إلى الصفحة أو دالة أخرى أو اختبار — return فتح إعادة الاستخدام خارج الجسم.
function demo() {
console.log("first");
return 1;
console.log("second");
}
demo();
لا شيء بعد return يُنفَّذ
هذا الاستدعاء يطبع first ثم يُرجع 1. السطر الذي كان سيطبع second لا يعمل أبداً. هذا ليس خطأ — return ينهي الاستدعاء فوراً.
function label(score) {
if (score < 0) {
return "invalid";
}
return "ok";
}
console.log(label(-1));
console.log(label(10));
اخرج مبكراً عندما يكون الجواب جاهزاً
إذا كان score سالباً تُرجع الدالة "invalid" وتتخطى الباقي. وإلا تُرجع "ok". هذا الخروج المبكر يُبقي المسار السعيد قصيراً وواضحاً.
function shout(msg) {
console.log(msg);
}
let result = shout("hi");
console.log(result);
نسيتَ الإرجاع؟
shout تطبع فقط. الاستدعاء ينتهي، لكن بـ undefined. حفظ ذلك الاستدعاء يضع undefined في result. إن احتجت قيمة خارجاً، اكتب return صريحاً.
ضع القيمة المُرجَعة على الصفحة
ابنِ الرسالة بـ return، ثم اكتب تلك السلسلة في فقرة. تبقى الدالة مركّزة على إنتاج النص؛ كود الصفحة يقرر أين تظهر.
اعرض return على الصفحة
عرّف دالة تُرجع سلسلة ترحيب، استدعِها، وضع النتيجة في فقرة.
<!DOCTYPE html>
<html>
<head>
<title>return — page</title>
</head>
<body>
<p id="msg">…</p>
<script>
function welcome(guest) {
return "Hello, " + guest;
}
let box = document.getElementById("msg");
box.textContent = welcome("Omar");
</script>
</body>
</html>
الصفحة تعرض Hello, Omar. welcome أرجعت السلسلة؛ السطر التالي كتبها في الفقرة. غيّر الوسيط فقط، حدّث، واقرأ السطر الجديد. الدرس التالي دوال السهم — طريقة أقصر لكتابة بعض هذه الدوال.
جرّبها بنفسك
- اكتب
function sum(x, y)تُرجعx + y، خزّن الاستدعاء في متغير، واطبع ذلك المتغير. - اكتب
function hi(name)تُرجع"hi "معname، ثم اطبع السلسلة المُرجَعة. - ضع
console.logبعدreturnداخل دالة؛ تأكد أن ذلك السطر لا يُطبع. - اكتب حارساً: إن كان
n === 0أرجع"zero"وإلا"nonzero". - استدعِ دالة تطبع فقط بـ
console.logوخزّن الاستدعاء؛ تأكد أنك تحصل علىundefined. - في عرض HTML غيّر سلسلة الوسيط فقط، حدّث، واقرأ الفقرة.
أخطاء شائعة
- الاعتماد على
console.logفقط داخل الدالة وتوقّع أنlet x = f()يحمل قيمة مفيدة - نسيان حفظ أو استخدام القيمة المُرجَعة عند الاستدعاء
- كتابة كود بعد
returnوالتعجب لماذا لا يعمل - كتابة
return;فارغ وأنت تقصدreturn value; - البحث عن حيل المعاملات هنا — هذه الصفحة عن المخرجات؛ المدخلات كانت الدرس السابق
ملخص
returnيرسل قيمة إلى المستدعي- خزّن تلك القيمة أو استخدمها خارج الدالة
- بعد
returnيُتخطى باقي ذلك الاستدعاء - الخروج المبكر طريقة نظيفة لإنهاء الحالات الخاصة
- بلا
return(أوreturnفارغ) → الاستدعاء يعطيundefined - تحديث الصفحة يمكن أن يستخدم سلسلة مُرجَعة
- التالي: دوال السهم — صيغة مختصرة للدوال
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى