انکشن()setTimeout را پیادهسازی کردهایم بدین صورت که فانکشنی بینام به صورت ()function را در قالب یک Callback Function به عنوان آرگومان ورودی به()setTimeout میدهیم که در آن گفتهایم در صورت فراخوانی، عدد 1 را در خروجی چاپ کند و همچنین مقدار عددی 500 را به عنوان آرگومان ورودیِ دوم در نظر گرفته و گفتهایم که این فانکشن بدون نام را پس از 500 میلیثانیه فراخوانی کرده و اجرا کند که در نهایت عدد 1 با 500 میلیثانیه تأخیر در خروجی چاپ خواهد شد.
بر اساس توضیحاتی که در ابتدا به آنها اشاره کردیم، جاوااسکریپت یک زبان مبتنی بر رویداد است و هیچ یک از تَسکها در آن بلاک نمیشوند و به صورت موازی اجرا میشوند که از همین روی، در این مثال سیستم تحت هیچ عنوان 500 میلیثانیه سایر تَسکها را بلاک نمیکند تا منتظر اتمام اجرای فانکشن ()first بماند بلکه این فانکشن را اجرا کرده و در این فاصله به سراغ ادامۀ کُد رفته و فانکشن ()second را اجرا میکند و همانطور که مشاهده میکنید، در ابتدا فانکشن()first فراخوانی شده و در فاصلۀ زمانی که این فانکشن تکمیل میشود، فانکشن()second فراخوانی و بلافاصله اجرا میشود که از همین روی عدد 2 در ابتدا چاپ شده و در ادامه پس از مدت زمان تعیینشده (۵۰۰ میلیثانیه) عدد 1 در خروجی چاپ میشود:
2 1
در واقع، این موضوع بدین معنا نیست که زبان برنامهنویسی جاوااسکریپت فانکشنهای فوق را به همان ترتیب تعریفشده اجرا نمیکند بلکه حقیقت این است که منتظر دریافت ریسپانس حاصل از اجرای فانکشن ()first قبل از اجرای فانکشن()second نمیماند به طوری که فانکشن ()first را فراخوانی کرده و همزمان به سراغ فراخوانی فانکشن ()second میرود و همین مسئله منجر بدین خواهد شد تا عدد 2 بلافاصله در خروجی چاپ شده و فانکشن()first نیز با 500 میلیثانیه تأخیر اجرا شده و عدد 1 را در خروجی نمایش دهد.
چرا از روش Callback در فراخوانی فانکشنها استفاده میکنیم؟
در پاسخ به این پرسش باید گفت که ممکن است اجرای برخی فانکشنها زمانبَر بوده و در صورت فراخوانی به همان ترتیب فراخوانیشده اجرا نشوند و بنابراین با بهکارگیریِ روش کالبَک، سیستم را ملزم به رعایت این مسئله خواهیم کرد که تا زمانی که اجرای فانکشن مد نظر تمام نشده، مفسر جاوااسکریپت نتواند تَسک بعدی مد نظر ما را اجرا کند.
اما در عین حال گزارۀ فوق بدین معنا نیست که سیستم تمامی فانکشنها را بلاک کرده و منتظر میماند تا اجرای فانکشن مد نظر به اِتمام رسیده و در ادامه فانکشن کالبَک را اجرا کند بلکه با بهکارگیریِ این روش، اجرای فانکشن کالبَک را ملزم به اِتمام اجرای فانکشن مد نظر میکنیم و این در حالی است که سیستم در صورت مشاهدۀ زمانبَر بودن فانکشن مذکور به سراغ اجرای تَسکهای دیگری غیر از فانکشن کالبَک میرود و اجرای آن را به زمانی موکول میکند که اجرای فانکشن زمانبَر مذکور به اِتمام رسیده باشد که در ادامه با ذکر یک مثال نحوۀ توسعۀ اپلیکیشن با بهکارگیری روش Callback را تشریح میکنیم.