دوال رد النداء
الكوب فقرة، #cup، ويبدأ blank. لا مؤقت غلاية في هذه الصفحة.
serve تأخذ طلبًا ودالة. تلك الدالة هي رد النداء: تمرّرها، وserve تناديها. النداء يحدث قبل أن ترجع serve، فالسطر التالي يرى المشروب من قبل. السطر lida tea / poured.
ليست الغلاية
الصفحة السابقة سجّلت cold فورًا وhot بعد 400 ملي ثانية. سطرها كان cold / hot / 3. المؤقت ينتظر. serve لا تنتظر. إن كنت تبحث عن setTimeout فهذا المنضدة الخطأ.
السؤال: من ينادي الدالة التي مرّرتها؟
اسم المعامل مجرد اسم
داخل serve المعامل اسمه done. عند النداء الدالة بلا اسم. serve لا تبالي بالاسم. تبالي أنها استلمت دالة، وأنها تناديها بحجة واحدة: الطلب زائد كلمة tea.
النداء قبل الرجوع
done(order + " tea") يجري، والكوب يُملأ، ثم تنتهي serve. السجل تحت النداء هو المشروب من قبل.
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.
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 لا تستلم المشروب. تعلّم فقط أن الصب تم.
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 تنادي الدالتين قبل الجمع.
<!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 هي الصفحة السابقة.
عند المنضدة
- مرّر دالة إلى
serveودعها تناديها بالمشروب. السجل lida tea. - استخدم
serveلا تناديdone. السجل يبقى blank. - مرّر
doneوafter. السجل lida tea / poured. - اقرأ سطر الصفحة: 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
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى