سلام رفقا. امیدوارم حالتون عالی باشه.
یکی از سوالاتی که ممکنه به عنوان JavaScript developer در مصاحبه های شغلی ازت بپرسن، اینه که closure در جاوا اسکریپت چیه و چی کار میکنه؟
شاید اولش خیلی سخت به نظر برسه ولی اگه این مقاله رو تا آخر بخونی خیلیییی راحت با این مفهوم آشنا میشی. بهت قول میدم...
تعریف closure در یه جمله: یعنی زمانی که تابع بتونه هم از متغیرهای درونی و هم از متغیرهای بیرونی خودش استفاده کنه...
تماااااااااام.
به صورت کلی، متغیرهایی که در جاوا اسکریپت ساخته میشن، 2 نوع هستند:
1. متغیرهای global
2. متغیرهای local
متغیرهای گلوبال در همه جای جاوا اسکریپت در دسترس هستند و میشه ازشون استفاده کرد.(هیچ محدودیتی نداره)
در حالی که....
متغیرهای لوکال فقط درون یه scope یا تابع در دسترس هستن و بیرون از تابع به هیچ دردی نمیخوره.
شروع یه داستان:بزار این مفهوم رو با یه داستان خیلی باحال و کوتاه که خودم ساختمش برات بگم.
فرض کن یه تابع تو جاوا اسکریپت ساختی و این تابع عزیز ما قصد داره به یه مسافرت بره...
آقای تابع یه کوله پشتی برای خودش برمیداره و هرچی متغیر و دستور و لوازم شخصی داره، داخلش قرار میده و هیچ وقت این کوله پشتی رو از خودش جدا نمیکنه.
هر زمان که بخواد، میتونه زیپ کوله پشتی رو باز کنه و هرچی دوست داره رو استفاده کنه. (متغیرها، دستورات و ....)
مثالو نگاه کن:
(در اینجا آقای تابع یه متغیر تو کوله پشتی خودش داره و خیلی راحت میتونه ازش استفاده کنه)
آقای تابع حتی میتونه از منابع دیگران هم بدون نگرانی استفاده کنه و اونارو هم در کنار خودش داشته باشه.
مثال :
(در اینجا هم آقای تابع تو کوله پشتی خودش هیچ متغیری نداره و از کس دیگه ای قرض میکنه و استفاده میکنه)
تموم شد و رفت. این یعنی مفهوم closure
ما closure هارو هیچ وقت دستی تنظیم نمیکنیم. خود جاوا اسکریپت اونو به صورت اتومات میسازه.
فقط کافیه تو با مفهوم و نحوه ی کار کردنش آشنا بشی.
خدایی هیچ محتوایی رو پیدا نکردم که این قدر ساده و باحال این مفهوم رو توضیح بده. پس تصمیم گرفتم خودم یه مقاله بنویسم.
اگه خوشت اومد برای بقیه هم این مفهومو توضیح بده و برام دعا کن.
دوستون دارم