الدرس 8 من 8
دوال تتذكّر
- 14 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
حالة خاصة بلا متغيّر عامّ
الشرح
الدالة في JavaScript تحمل معها النطاق الذي أُنشئت فيه. فإن أرجعتَ دالة من داخل دالة، بقيت الداخلية ترى متغيّرات الخارجية حتى بعد انتهاء تنفيذها. هذا هو الإغلاق.
وفائدته حالة خاصة بلا متغيّر عامّ: makeCounter() تُنشئ let count = 0 وتُرجع دالة تزيده. لا يصل إلى count أحد غير تلك الدالة، وكل نداء لـ makeCounter يصنع عدًّا جديدًا مستقلًّا. وعليه تقوم أنماط ستلقاها كثيرًا: الكبح، والتذكير، والدالة التي لا تعمل إلا مرّة.
الفخّ: أن تعرّف المتغيّر خارج الدالة المُنشِئة. يبدو سليمًا مع عدّاد واحد، ثم تُنشئ الثاني فتجدهما يتقاسمان العدّ نفسه.
المطلوب
اكتب makeCounter() تُرجع دالة تُرجع 1 ثم 2 ثم 3 في نداءاتها المتتالية، وonce(fn) تُرجع دالة تستدعي fn في أول نداء فقط، وتُرجع نتيجته الأولى في كل نداء بعده.
معايير التصحيح
6 معايير- العدّاد يتذكّر: 1 ثم 2 ثم 3
- كل عدّاد مستقلّ بذاكرته
- الدالة الملفوفة بـ once تُستدعى مرّة واحدة
- وتُرجع النتيجة الأولى في كل نداء
- كل once تحفظ حالتها وحدها
- زرّ «ابدأ الجولة» لا يعمل إلا مرّة