✍️ تابعهای داخلی مقدار یک متغیر را لزوماً در لحظه ساخته شدن عکسبرداری نمیکنند؛ به خود متغیر دسترسی دارند. اگر چند callback از یک شمارنده مشترک استفاده کنند و بعد از تمام شدن حلقه اجرا بشن، ممکنه همه آخرین مقدار آن شمارنده را ببینند. این همان جاییه که تفاوت var و let دوباره اهمیت پیدا میکنه.
مثلاً میخوایم برای سه برچسب، سه تابع خواندن بسازیم. اگر شمارنده حلقه var باشه، بعد از حلقه به طول آرایه رسیده و همه تابعها همان اندیس خارج از محدوده را میخوانند. با let در تعریف حلقه، هر دور اتصال مستقل خودش را دارد و callback همان اندیس مربوط به آن دور را نگه میداره.
در تمرین، callbackها اول ساخته میشن و بعد یکجا اجرا میشن؛ ترتیب این دو مرحله را عوض نکن. خروجی باید آرایه متنها باشد، نه آرایه تابعها. خطای رایج، تغییر مقدار نهایی شمارنده برای اصلاح فقط آخرین عضو است؛ مسئله اصلی اشتراک متغیر میان همه callbackهاست. آرایه خالی هم باید بدون فراخوانی اضافه، خروجی خالی بده.
فعالیت شما
labelSnapshot(labels) را اصلاح کن. labels آرایه رشته است. ابتدا برای هر اندیس یک callback بساز، سپس callbackها را اجرا کن و همان برچسبها را به ترتیب در آرایه نتیجه بده؛ ['الف','ب'] => ['الف','ب']، تکرار حفظ شود و خالی => []. از دامنه مستقل هر دور حلقه استفاده کن.