# क्लोज़र — जावास्क्रिप्ट

Source: https://www.geekswithgeeks.com/hi/javascript/js-closures

> वे फ़ंक्शन जो अपना वातावरण याद रखते हैं।

## क्लोज़र क्या है?

क्लोज़र एक ऐसा फ़ंक्शन है जो अपने बनने की जगह के वेरिएबल **याद रखता** है, भले ही वह बाहरी फ़ंक्शन खत्म हो चुका हो।

## क्लोज़र से बना काउंटर

`makeCounter()` की हर कॉल अपना निजी `count` बनाती है, जिसे केवल लौटाया गया फ़ंक्शन ही छू सकता है।

```js
function makeCounter() {
  let count = 0;
  return function () {
    count += 1;
    return count;
  };
}
const counter = makeCounter();
console.log(counter());  // 1
console.log(counter());  // 2
```

## एक निजी बैकपैक

क्लोज़र को एक **बैकपैक** समझें जिसे भीतरी फ़ंक्शन साथ ले जाता है — यह बाहरी scope से ज़रूरी वेरिएबल पैक करता है और उन्हें, निजी रूप से, हर जगह अपने साथ रखता है।

**Quiz:** काउंटर उदाहरण में, दूसरी बार counter() बुलाने पर 1 नहीं बल्कि 2 क्यों लौटता है?

- [ ] क्योंकि count हर कॉल पर रीसेट होता है
- [x] क्योंकि क्लोज़र कॉल के बीच count को ज़िंदा रखता है
- [ ] क्योंकि JS पिछला रिटर्न मान कैश करता है

*Answer:* क्योंकि क्लोज़र कॉल के बीच count को ज़िंदा रखता है. भीतरी फ़ंक्शन `count` को क्लोज़ ओवर करता है, इसलिए यह `counter()` की अलग-अलग कॉल के बीच बना रहता है।
