فرض کن این کد رو داریم:
function counter() {
let count = 0;
return function () {
count++;
return count;
};
}
const increment = counter();
console.log(increment()); // 1
console.log(increment()); // 2
console.log(increment()); // 3شاید سوالت این باشه:
چطور
count بعد از اجرای ()counter هنوز وجود داره؟ 🤔اینجا Closure وارد میشه.
تابعی که داخل counter ساخته شده، به متغیرهای Scope بیرونی خودش دسترسی رو حفظ میکنه؛ حتی وقتی اجرای تابع بیرونی تموم شده.
یعنی این تابع:
function () {
count++;
return count;
}هنوز به count دسترسی داره.
این قابلیت Closure کجا به درد میخوره؟
یکی از کاربردهای مهمش ساختن Private State هست:
function createUser() {
let password = "123456";
return {
checkPassword(value) {
return value === password;
}
};
}
const user = createUser();
user.checkPassword("123456"); // trueاینجا password مستقیماً از بیرون قابل دسترسی نیست:
user.password
// undefined
ولی متد checkPassword همچنان بهش دسترسی داره.
🔥 در واقع Closure یکی از پایههای مهم مفاهیمی مثل:
* Factory Functions
* Data Privacy
* Callbacks
* Event Handlers
* Function Currying
در JavaScript محسوب میشه.
پس Closure فقط یه مفهوم تئوری نیست؛ توی کد واقعی دائماً باهاش سروکار داری.
@CodeVerse_dev