✍️ هر بار اجرای تابع سازنده، محیط تازهای میسازه. اگر دو شمارنده با یک سازنده درست کنیم، نباید وضعیتشان با هم قاطی بشه. متغیر 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 => دو آرایه خالی.