دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۴
  • آبان

جلسه ۷۰ : Closure در جاوا اسکریپت

  • دسته‌بندی‌ها :
جلسه ۷۰ : Closure در جاوا اسکریپت
    • جزئیات
    • نوع محتواآموزش تصویری

      با عرض سلام خدمت کاربران محترم سایت پی وی لرن.
      در این جلسه قصد داریم تا به آموزش Closure در جاوا اسکریپت JavaScript و توابع تو در تو در جاوا اسکریپت بپردازیم.

      متغیر ها در جاوا اسکریپت از لحاظ قلمرو و محدوده به دو نوع محلی local و سراسری global تقسیم می شوند.

      متغیر های سراسری می توانند با استفاده از closure ها تبدیل به متغیر های private شوند.

      آموزش closure در جاوا اسکریپت

      متغیرهای عمومی

      یک تابع می تواند علاوه بر متغیر هایی که داخل آن تعریف شده اند، به متغیر های خارج از بدنه خود نیز دسترسی پیدا کند.

      مثال-۱ : دسترسی تابع به متغیرهای تعریف شده داخل بدنه تابع

      مثال : دسترسی تابع به متغیرهای تعریف شده داخل بلوک تابع
      خودتان امتحان کنید »

      مثال-۲ : دسترسی تابع به متغیرهای تعریف شده در خارج از بدنه ی تابع

      مثال : دسترسی تایع به متغیرهای خارجی
      خودتان امتحان کنید »

      در این مثال متغیر a یک متغیر سراسری می باشد.

      در یک صفحه وب متغیر های سراسری به شی window تعلق دارند.

      متغیر های سراسری می توانند توسط تمام اسکریپت صفحه استفاده و تغییر داده  شوند.

      اما متغیر های محلی فقط در داخل بلوکی که تعریف شده اند قابل دسترس هستند و توابع دیگر نمی توانند از آن ها استفاده کنند.

      نکنه: اگر متغیری بدون کلمه کلیدی var ایجاد شود، همیشه سراسری است حتی با وجود اینکه در داخل یک تابع ایجاد شده باشد.

      چرخه زندگی متغیر ها

      متغیر های سراسری تا هنگامی که برنامه شما (پنجره یا صفحه وب) تمام نشده باشد، به اصطلاح زنده و قابل استفاده هستند.

      اما متغیر های محلی عمر کوتاهی دارند و با پایان اجرای تابع و بلوکی که در آن ایجاد شده اند، تمام می شوند.

      معضل شمارش معکوس

      فرض کنید شما می خواهید از یک متغیر برای شمارش چیزی استفاده کنید و شما می خواهید این شمارنده برای تمام توابع موجود باشد.

      شما می توانید از یک متغیر عمومی و یک تابع برای افزایش شمارنده استفاده کنید:

      مثال : تعریف شمارنده برای تمامی توابع
      خودتان امتحان کنید »

      یک مشکل در راه حل بالا وجود دارد: هر کدی از صفحه می تواند بدون فراخوانی ()add شمارنده را تغییر دهد.

      برای جلوگیری از تغییر کدهای دیگر، باید از تابع ()add استفاده کرد.

      مثال : جلوگیری از تغیر کدهای دیگر
      خودتان امتحان کنید »

      کد فوق نتیجه نمی دهد، زیرا شمارنده ی عمومی را به جای شمارنده ی محلی نمایش دادیم.

      ما می توانیم شمارنده عمومی را حذف کنیم و با تابع return می توانیم به شمارنده محلی دسترسی یابیم:

      مثال : دسترسی به شمارنده ی محلی
      خودتان امتحان کنید »

      توابع تو در تو در جاوا اسکریپت

      همانطور که گفتیم تمام توابع به متغیر های سراسری دسترسی دارند.
      در واقع تمام توابع به بلوک بالای خودشان دسترسی دارند.

      در مثال زیر یک تابع داخلی به نام ()plus به متغیر counter در تابع والد خود دسترسی دارد:

      مثال : توابع تودرتو در جاوا اسکریپت
      خودتان امتحان کنید »

      Closure ها در جاوا اسکریپت

      به مثال زیر توجه کنید:

      مثال : نمونه تعریف closureها در جاوا اسکریپت
      خودتان امتحان کنید »

      توضیحات:

      متغیر add به مقدار برگشتی یک تابع فراخوان اختصاص داده شده است.

      تابع خود فراخوان تنها یک بار ایجاد می شود. این تابع مقدار counter را به ۰ تغییر داده و یک تابع داخلی را برگشت می دهد.

      از این طریق add یک تابع محسسوب می شود.
      بخش جالب ماجرا اینجاست که add می تواند به شمارنده بلوک والد خود دسترسی داشته باشد.

      این کار Closure نامیده می شود که به توابع این امکان را می دهد تا متغیر های private داشته باشند.

      counter توسط بلوک تابع ناشناس محافظت می شود و فقط می تواند توسط تابع add تغییر  کند.

      یک Closure تابعی است که به اجزای بلوک والد خود دسترسی دارد حتی اگر تابع بسته شده باشد.

      جلسه آموزش Closure در جاوا اسکریپت JavaScript نیز به پایان رسید.

      QR:  جلسه ۷۰ : Closure در جاوا اسکریپت
      به اشتراک بگذارید


      دیدگاه کاربران
      1. تصویر کاربر
        • تصویر کاربر
          • تصویر کاربر