جاري التحميل...

دوال رد النداء

الكوب فقرة، #cup، ويبدأ blank. لا مؤقت غلاية في هذه الصفحة.
serve تأخذ طلبًا ودالة. تلك الدالة هي رد النداء: تمرّرها، وserve تناديها. النداء يحدث قبل أن ترجع serve، فالسطر التالي يرى المشروب من قبل. السطر lida tea / poured.

ليست الغلاية

الصفحة السابقة سجّلت cold فورًا وhot بعد 400 ملي ثانية. سطرها كان cold / hot / 3. المؤقت ينتظر. serve لا تنتظر. إن كنت تبحث عن setTimeout فهذا المنضدة الخطأ.
السؤال: من ينادي الدالة التي مرّرتها؟

اسم المعامل مجرد اسم

داخل serve المعامل اسمه done. عند النداء الدالة بلا اسم. serve لا تبالي بالاسم. تبالي أنها استلمت دالة، وأنها تناديها بحجة واحدة: الطلب زائد كلمة tea.

النداء قبل الرجوع

done(order + " tea") يجري، والكوب يُملأ، ثم تنتهي serve. السجل تحت النداء هو المشروب من قبل.

مرّر دالة

javascript
function serve(order, done) {
done(order + " tea");
}
let cup = document.getElementById("cup");
serve("lida", function (drink) {
cup.textContent = drink;
});
console.log(cup.textContent);

السجل lida tea. الكوب لم يبقَ blank، ولم ينتظر شيء.

انسَ النداء

هذه serve تبني المشروب ثم تقف. لا تنادي done. الدالة التي مرّرتها تبقى مكانها. الكوب صار blank قبل النداء ويبقى blank.

لا تنادِ done

javascript
function serve(order, done) {
order = order + " tea";
}
let cup = document.getElementById("cup");
cup.textContent = "blank";
serve("lida", function (drink) {
cup.textContent = drink;
});
console.log(cup.textContent);

السجل blank. لا يُرمى خطأ. رد نداء لا يُنادى لا يجري. سلسلة المشروب بُنيت ولم يستلمها أحد.

دالة ثانية بعد الأولى

تستطيع serve أن تأخذ دالتين. تنادي done أولًا بالمشروب. تنادي after فقط بعد رجوع ذلك النداء. after لا تستلم المشروب. تعلّم فقط أن الصب تم.

done ثم after

javascript
function serve(order, done, after) {
done(order + " tea");
after();
}
let seen = [];
serve(
"lida",
function (drink) {
seen.push(drink);
},
function () {
seen.push("poured");
}
);
console.log(seen.join(" / "));

السجل lida tea / poured. بدّل النداءين داخل serve فتتبدل الكلمتان. الترتيب هو ترتيب النداءات، لا ترتيب كتابة تعابير الدوال.

ماذا تجمع الصفحة

الصفحة تستخدم serve الثانية، التي معها done وafter. تدفع المشروب ثم poured وتكتب السطر. لا تأخير بينهما.

السطر تحت الكوب

السكربت في آخر body. serve تنادي الدالتين قبل الجمع.

عرض الصفحة — الكوب

html
<!DOCTYPE html>
<html>
<head>
<title>serve-cup — page</title>
</head>
<body>
<p id="cup">blank</p>
<p id="line">…</p>
<script>
function serve(order, done, after) {
done(order + " tea");
after();
}
let seen = [];
serve(
"lida",
function (drink) {
seen.push(drink);
},
function () {
seen.push("poured");
}
);
document.getElementById("line").textContent = seen.join(" / ");
document.getElementById("cup").textContent = seen[0];
</script>
</body>
</html>

السطر lida tea / poured. الكوب يعرض lida tea. كلمة blank ذهبت. cold / hot / 3 هي الصفحة السابقة.

عند المنضدة

  1. مرّر دالة إلى serve ودعها تناديها بالمشروب. السجل lida tea.
  2. استخدم serve لا تنادي done. السجل يبقى blank.
  3. مرّر done وafter. السجل lida tea / poured.
  4. اقرأ سطر الصفحة: lida tea / poured.

أخطاء عند المنضدة

الكوب يعرض مشروبًا أو يبقى blank. لا يعرض عدّ الفاصل.

  • توقع أن السجل تحت serve ما زال blank وقد نوديت done
  • ظن أن رد النداء يجري حتى لو لم تنادِه serve
  • انتظار 400 ملي ثانية من أجل lida tea
  • وضع poured قبل المشروب بنداء after أولًا
  • قراءة السطر كـ cold / hot / 3

احتفظ بهذا

  • رد النداء دالة تمرّرها ليناديها غيرك
  • serve تنادي done قبل أن ترجع، فالسطر التالي يرى lida tea
  • إن لم تُنادَ done يبقى الكوب blank ولا يُرمى خطأ
  • after تجري فقط بعد رجوع done
  • سطر الصفحة lida tea / poured

🧠 اختبر معرفتك

جاهز للبدء

اختبر معرفتك

تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع

❓
6
الأسئلة
🎯
70%
للنجاح
♾️
∞
الوقت
🔄
∞
المحاولات

📝 التعليمات

  • اقرأ كل سؤال بعناية
  • اختر أفضل إجابة لكل سؤال
  • يمكنك إعادة الاختبار عدة مرات كما تريد
  • سيتم عرض تقدمك في الأعلى