كيف تعمل الإغلاقات (closures) في JavaScript؟ اشرح مع أمثلة
مرحباً بالجميع! لقد بدأت للتو في تعلم JavaScript ولا أستطيع فهم موضوع الإغلاقات (closures). قرأت الكثير من المقالات، لكني ما زلت مرتبكاً.
هذا مثال يربكني. أقوم بإنشاء دالة تُرجع دالة أخرى:
```javascript
function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter1 = createCounter();
const counter2 = createCounter();
console.log(counter1()); // 1
console.log(counter1()); // 2
console.log(counter2()); // 1 — لماذا ليس 3؟
```
لماذا يتصرف `counter1` و `counter2` كعدادات منفصلة؟ كنت أعتقد أن المتغير `count` سيكون مشتركاً. وكيف تتذكر JavaScript قيمة `count` بعد أن تنتهي الدالة `createCounter` من عملها؟ عادةً ما تُدمر المتغيرات المحلية بعد الخروج من الدالة.
اشرح لي، من فضلك، آلية عمل الإغلاقات بكلمات بسيطة. كيف تخزن المراجع إلى المتغيرات؟ وأين يمكن أن يكون ذلك مفيداً في المشاريع الحقيقية؟