مقدمه: Closure یکی از مهمترین مفاهیم JavaScript
اگر بخواهیم فقط یک مفهوم در JavaScript را نام ببریم که درک آن تفاوت بین یک توسعهدهنده مبتدی و حرفهای را مشخص میکند، آن مفهوم Closure است. Closure نه تنها یکی از پرتکرارترین سوالات مصاحبههای فرانتاند است، بلکه در روزمرهترین کدهایی که مینویسید هم حضور دارد، حتی اگر از آن آگاه نباشید. Closure به زبان ساده ترکیبی از یک تابع و محیط Lexical است که در آن تابع تعریف شده است. اما این جمله ساده، عمق بسیار زیادی دارد و برای درک کامل آن باید ابتدا مفاهیم پایهایتری مانند Scope، Lexical Scope و Scope Chain را بشناسید. در جاوااسکریپت، هر تابعی که تعریف میکنید یک Closure ایجاد میکند. Closure به تابع اجازه میدهد به متغیرهایی که در تابع بیرونی و محیط بیرونی تعریف شدهاند دسترسی داشته باشد، حتی بعد از آنکه تابع بیرونی اجرا شده و از Call Stack خارج شده باشد. این رفتار ممکن است در ابتدا عجیب به نظر برسد، اما وقتی مکانیزم Scope و Lexical Environment را درک کنید، Closure کاملاً منطقی خواهد بود. Closure در بسیاری از الگوهای برنامهنویسی JavaScript نقش کلیدی دارد. از Event Handlerها گرفته تا Module Pattern، از React Hooks گرفته تا Middlewareهای Express.js، همه و همه از Closure استفاده میکنند. درک Closure به شما کمک میکند کدی بنویسید که هم قدرتمند باشد و هم قابل نگهداری. هدف این مقاله این است که شما را از مفاهیم کاملاً پایهای Scope شروع کند و قدم به قدم به Closure و کاربردهای پیشرفته آن برساند. در پایان این مقاله، نه تنها Closure را درک خواهید کرد، بلکه میتوانید آن را در مصاحبهها به زبان ساده توضیح دهید و در پروژههای واقعی به صورت حرفهای از آن استفاده کنید. قبل از شروع، یک نکته مهم: Closure یک ویژگی زبانی خاص جاوااسکریپت نیست و در بسیاری از زبانهای برنامهنویسی مانند Python، Swift و Rust هم وجود دارد. اما نحوه پیادهسازی و رفتار آن در هر زبان متفاوت است. درک Closure در JavaScript به شما کمک میکند در سایر زبانها هم این مفهوم را سریعتر یاد بگیرید. پس بیایید سفرمان را از Scope شروع کنیم.



