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

رفع باگ var در جاوااسکریپت؛ متغیر حلقه و نام بیرونی

دامنه متغیرها در جاوااسکریپت و خطاهای scope · 0٪

✍️ var برخلاف let دامنه بلوکی ندارد. اگر داخل یک تابع، در حلقه با var نامی را تعریف کنی که قبلاً همان تابع داشته، متغیر تازه‌ای برای حلقه ساخته نمی‌شه. حلقه مقدار همان نام قبلی را تغییر می‌ده. این رفتار می‌تونه برچسب، شمارنده یا نتیجه‌ای را که بعد از حلقه لازم داری خراب کنه.

مثال متفاوت: اگر var message = 'آماده' داشته باشیم و داخل یک بلوک var message = 'تمام' بنویسیم، بعد از بلوک هم مقدار «تمام» دیده می‌شه. با let داخلی، این دو نام جدا می‌مانند. به همین دلیل بهتره شمارنده موقت حلقه را با let تعریف کنیم.

در تمرین، حلقه باید تعداد مشخصی دور بخوره و بعد برچسب اولیه برگرده. تابع نباید وابسته به تعداد دورها، عدد برگردونه. حتی برای صفر دور هم نام بیرونی باید محفوظ باشه. خطای رایج اینه که فقط مقدار اولیه را عوض کنیم؛ ریشه مشکل، مشترک بودن متغیر بیرونی و شمارنده است. یک تغییر در تعریف شمارنده این ارتباط ناخواسته را قطع می‌کنه.

فعالیت شما

labelAfterLoop(limit) را اصلاح کن. limit عدد صحیح نامنفی است. حلقه limit بار اجرا شود و تابع همیشه رشته «بیرون» را برگرداند؛ نمونه limit=3 و limit=0 هر دو «بیرون» هستند. متغیر شمارنده باید از label بیرونی جدا باشد.

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

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

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

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

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

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

function labelAfterLoop(limit) {
  var label = 'بیرون';
  // TODO: حلقه را با شمارنده‌ای مستقل از label کامل کن.
  return '';
}