✍️ var برخلاف let دامنه بلوکی ندارد. اگر داخل یک تابع، در حلقه با var نامی را تعریف کنی که قبلاً همان تابع داشته، متغیر تازهای برای حلقه ساخته نمیشه. حلقه مقدار همان نام قبلی را تغییر میده. این رفتار میتونه برچسب، شمارنده یا نتیجهای را که بعد از حلقه لازم داری خراب کنه.
مثال متفاوت: اگر var message = 'آماده' داشته باشیم و داخل یک بلوک var message = 'تمام' بنویسیم، بعد از بلوک هم مقدار «تمام» دیده میشه. با let داخلی، این دو نام جدا میمانند. به همین دلیل بهتره شمارنده موقت حلقه را با let تعریف کنیم.
در تمرین، حلقه باید تعداد مشخصی دور بخوره و بعد برچسب اولیه برگرده. تابع نباید وابسته به تعداد دورها، عدد برگردونه. حتی برای صفر دور هم نام بیرونی باید محفوظ باشه. خطای رایج اینه که فقط مقدار اولیه را عوض کنیم؛ ریشه مشکل، مشترک بودن متغیر بیرونی و شمارنده است. یک تغییر در تعریف شمارنده این ارتباط ناخواسته را قطع میکنه.
فعالیت شما
labelAfterLoop(limit) را اصلاح کن. limit عدد صحیح نامنفی است. حلقه limit بار اجرا شود و تابع همیشه رشته «بیرون» را برگرداند؛ نمونه limit=3 و limit=0 هر دو «بیرون» هستند. متغیر شمارنده باید از label بیرونی جدا باشد.