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

پیش‌بینی شمارنده closure در جاوااسکریپت؛ تغییر وضعیت خصوصی

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

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

مثلاً یک شماره‌ساز می‌تونه از ده شروع کنه و با هر درخواست یک شماره بالاتر بده. اگر متغیر شمارنده داخل تابع داخلی از نو تعریف بشه، هر فراخوانی از اول شروع می‌کنه و حافظه‌ای وجود ندارد. متغیر باید در محیط تابع سازنده باشه و تابع داخلی به همان متغیر دسترسی داشته باشه.

در کد پایین، count یک بار هنگام ساخت next ایجاد می‌شه. هر بار next اجرا می‌شه، اول count را یک واحد افزایش می‌ده و بعد آن را برمی‌گردونه. خطای رایج، جابه‌جا حساب کردن ترتیب افزایش و return است؛ اگر اول return انجام می‌شد، جواب فرق داشت. دو فراخوانی داخل آرایه از چپ به راست اجرا می‌شن و هر دو از یک شمارنده مشترک در همین closure استفاده می‌کنند.

function makeCounter(start) {
  let count = start;
  return () => { count += 1; return count; };
}
function counterDemo() {
  const next = makeCounter(2);
  return [next(), next()];
}
console.log(counterDemo());

فعالیت شما

آرایه خروجی counterDemo را با توجه به افزایش قبل از return انتخاب کن.

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

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

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

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

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

گزینه‌های پیش‌بینی خروجی

  1. [2, 3]
  2. [3, 4]
  3. [3, 3]