حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش جاوااسکریپت تکمیلی؛ توابع و پردازش داده

شمارنده‌های مستقل closure در جاوااسکریپت؛ دو محیط جدا

closure در جاوااسکریپت و تابع‌های دارای حافظه · 0٪

✍️ هر بار اجرای تابع سازنده، محیط تازه‌ای می‌سازه. اگر دو شمارنده با یک سازنده درست کنیم، نباید وضعیتشان با هم قاطی بشه. متغیر count باید داخل خود سازنده تعریف شده باشه؛ نه در یک جای مشترک بیرون آن. این استقلال یکی از مهم‌ترین کاربردهای closure است.

برای نمونه، دو باجه می‌تونند شماره نوبت جدا داشته باشند. گرفتن نوبت از باجه اول نباید شماره باجه دوم را زیاد کنه. در کد تمرین، در هر دور اول شمارنده a و بعد شمارنده b اجرا می‌شه. اگر هرکدام محیط خودش را داشته باشه، نتیجه هر آرایه فقط به مقدار شروع همان شمارنده و تعداد دورها بستگی دارد.

تابع wrapper باید خروجی معمولی و قابل تبدیل به JSON بده؛ اینجا یک شیء با دو آرایه. خود توابع شمارنده را برنگردان. خطای رایج، تعریف یک count مشترک برای هر دو تابع یا بازنشانی count در هر فراخوانی است. تعداد دور صفر هم مهمه: هر دو شمارنده ساخته می‌شن، ولی چون فراخوانی نداریم، هر دو آرایه خروجی خالی می‌مانند.

فعالیت شما

independentCounters(startA, startB, steps) را کامل کن. شروع‌ها عدد متناهی و steps عدد صحیح نامنفی است. دو شمارنده closure مستقل بساز؛ هر فراخوانی ابتدا یک واحد زیاد کند. steps بار از هرکدام بخوان و {a,b} برگردان؛ (0,10,2) => {a:[1,2],b:[11,12]}، steps=0 => دو آرایه خالی.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

فعالیت‌های این بخش به اشتراک فعال نیاز دارند. تهیهٔ اشتراک

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

function makeCounter(start) {
  // TODO: وضعیت خصوصی و تابع افزایش را بساز.
}
function independentCounters(startA, startB, steps) {
  // TODO: دو شمارنده جدا را اجرا و نتیجه JSONپذیر برگردان.
}