الگوی IIFE در جاوا اسکریپت

Ratings
(0)

گاهی اوقات می خواهیم یک میدان دید(scope) جدید برای یک متغیر تعریف کنیم. بعنوان مثال، برای جلوگیری از اینکه یک متغیر به صورت سراسری(global) تعریف شود، می توانیم از روش مذکور استفاده کنیم.  در جاوا اسکریپت، ما نمی توانیم کاری کنیم که یک قطعه کد(block) به این صورت عمل کند. بلکه باید از یک تابع استفاده کنیم. اما برای استفاده از یک تابع به صورت بلوکی(block-like manner) یک الگو وجود دارد. این الگو، IIFE نام دارد که مخفف عبارت زیر است و به صورت iffy خوانده می شود:

immediately invoked function expression
عبارت تابعی خودفراخوان
(function () { // باز کردن یک ایفی
  var tmp = ...; // یک متغیر که سراسری محسوب نمی شود
}()); // بستن الگوی ایفی

 مطمئن شوید که در کدها، مثال بالا را همان طور که نشان داده شده است(جدای از کامنت ها) تایپ کنید. یک تابع IIFE، در حقیقت یک عبارت تابعی است که بلافاصله پس از اینکه آن را تعریف کنیم، فراخوانی می شود. درون این تابع، یک میدان دید جدید(new scope) وجود دارد که از سراسری(global) تلقی شدن متغیر tmp جلوگیری می کند. برای اطلاعات بیشتر، مقاله ی Introducing a New Scope via an IIFE را در صفحه ی 183 مشاهده کنید.

 


 استفاده از IIFE در جاوا اسکریپت

کلوژرها ارتباط خود را با متغیرهای بیرونی حفظ می کنند؛ و گاهی اوقات ممکن است ما چنین چیزی را نخواهیم:

var result = [];
for (var i=0; i < 5; i++) {
  result.push(function () { return i }); // (1)
}
console.log(result[1]()); // 5 (not 1)
console.log(result[3]()); // 5 (not 3)

 مقدار برگردانده شده در خط شماره 3 همواره مقدار فعلی i را در خود نگهداری می کند، نه مقداری که این متغیر وقتی تابع مورد نظر ایجاد شده است، در خود داشته است. پس از اینکه این حلقه پایان یافت، متغیر i مقدار 5 را خواهد داشت؛ و علت اینکه تمام تابع ها در آرایه ی مورد نظر این مقدار را دارند، همین است. اگر می خواهید تابع خط شماره 3 حاوی مقدار لحظه ای از مقدار فعلی i باشد، می توانید از IIFE استفاده کنید:

for (var i=0; i < 5; i++) {
  (function () {
    var i2 = i; // copy current i
    result.push(function () { return i2 });
   }());
}

 

  • بازدید: 526

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.

ارسال