آشنایی با Closures
آشنایی با Closures
سلام دوستان! امروز میخوایم درباره یکی از مفاهیم جالب و پرکاربرد در جاوااسکریپت صحبت کنیم؛ چیزی که خیلیا اولش شاید براشون گیجکننده باشه، ولی وقتی بفهمیدش، واقعاً میتونه جادویی باشه!
بله، داریم درباره Closure صحبت میکنیم.
حالا چی هست این Closures ؟
خیلی ساده، Closure زمانی اتفاق میافته که یک تابع به متغیرهای خارج از خودش دسترسی داره، حتی وقتی که اون تابع در یک جایی دیگه از کد اجرا میشه. یعنی تابع میتونه متغیرهای محیط اطراف خودش رو ‘بهخاطر بسپره’ و بعداً به اونها دسترسی داشته باشه.
حالا چرا Closure اینقدر مهمه؟
Closure یکی از مفاهیمی هست که اگر یاد بگیرید، میتونید کدهای پیچیده و هوشمندتری بنویسید. به شما این امکان رو میده که تابعهایی بسازید که ‘خصوصی’ باشن، یعنی متغیرهایی که بهشون دسترسی دارید رو از بیرون از تابع مخفی کنید. در بسیاری از کتابخانهها و فریمورکهای معروف مثل React از این ویژگی زیاد استفاده میشه تا حافظه و عملکرد بهینهتری داشته باشیم. همچنین در جاهایی مثل مدیریت دادهها در پروژههای بزرگ، یا حتی در پروژههای کوچیک مثل ایجاد شمارندهها (counters) خیلی کاربردیه.
مثال ساده :
حالا بریم سراغ یه مثال تا کامل این موضوع رو متوجه بشید. فرض کنید تابعی داریم که یک پیام خوشامدگویی رو برمیگردونه و داخل اون تابع یه تابع دیگه هم تعریف شده که اسم رو چاپ میکنه. مثل این:
function greeting(msg) {
return function(name) {
console.log(`${msg}, ${name}!`);
};
}
const sayHello = greeting('سلام');
sayHello('یونس'); // خروجی: سلام، یونس!
در این مثال، تابع درونی (function(name)) به متغیر msg که توی تابع بیرونی تعریف شده بود دسترسی داره و این یعنی ما یه Closure داریم. حتی وقتی تابع greeting تموم شده و برگردونده شده، msg هنوز در دسترسه.
مثال عملی با شمارشگر :
حالا فرض کنید یه تابع دیگه داریم که به ما یک شمارشگر برمیگردونه و هر بار که اجراش کنیم، مقدار شمارشگر رو افزایش میده. مثل این:
function createCounter() {
let count = ۰;
return function() {
count++;
console.log(count);
};
}
const counter = createCounter();
counter(); // خروجی: ۱
counter(); // خروجی: ۲
اینجا، تابع درونی به متغیر count دسترسی داره و هر بار که اجراش میکنیم، count رو زیاد میکنه و به ما نشون میده.
جمعبندی :
پس میبینید که Closure به ما کمک میکنه تا کدهای پیچیدهتر و هوشمندتری بنویسیم.
در دنیای برنامهنویسی، Closure مفهومی بسیار مهمه چون به ما این قابلیت رو میده که متغیرهای خصوصی بسازیم، از حافظه بهینهتر استفاده کنیم و ازش در پروژههای واقعی مثل React یا حتی در برنامههای کوچیک بهره ببریم.