मॉड्यूल पाठ (4/4)
समापन और दायरा
क्लोजर एक फ़ंक्शन है जो उस दायरे के वेरिएबल्स को "याद रखता है" जिसमें इसे परिभाषित किया गया था, वह गुंजाइश ख़त्म हो जाने के बाद भी. यह जादू जैसा दिखता है लेकिन यह दायरे के नियमों का प्रत्यक्ष परिणाम है।
दायरा श्रृंखला
एक फ़ंक्शन स्कोप की श्रृंखला में चलते हुए, बाहर घोषित वेरिएबल्स को पढ़ सकता है:
const moltiplicatore = 10;
function moltiplicaPer10(n) {
return n * moltiplicatore; // reads from the closure
}
moltiplicaPer10(3); // 30फ़ंक्शन फ़ैक्टरी
सबसे विशिष्ट पैटर्न: एक फ़ंक्शन जो किसी अन्य फ़ंक्शन को "अनुकूलित" करता है इसे प्राप्त पैरामीटर।
function creaSaluto(prefisso) {
return function (nome) {
return `${prefisso}, ${nome}!`;
};
}
const ciao = creaSaluto('Ciao');
const buongiorno = creaSaluto('Buongiorno');
ciao('Anna'); // 'Ciao, Anna!'
buongiorno('Marco'); // 'Buongiorno, Marco!'creaSaluto पर प्रत्येक कॉल अपने स्वयं के prefisso के साथ एक अलग दायरा बनाती है।
निजी राज्य के साथ काउंटर
क्लासिक उदाहरण: एक क्लोजर जो काउंटर को बाहर से उजागर किए बिना रखता है।
function creaContatore() {
let n = 0;
return function () {
n++;
return n;
};
}
const c = creaContatore();
c(); // 1
c(); // 2
c(); // 3
const c2 = creaContatore();
c2(); // 1 ← isolated state!n निजी है: क्लोजर के बाहर कोई भी इसे पढ़ या संशोधित नहीं कर सकता है।
इसे अजमाएं
एक फ़ैक्टरी `makeCounter()` लागू करें जो एक फ़ंक्शन लौटाता है: फ़ंक्शन की प्रत्येक कॉल 1 से शुरू होने वाला एक प्रगतिशील पूर्णांक लौटाती है। अलग-अलग काउंटर स्वतंत्र होने चाहिए।
संकेत दिखाएँ
मेककाउंटर के अंदर लेट के साथ एन घोषित करें, फिर एक फ़ंक्शन लौटाएं जो ++एन करता है।
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
`makeAdderWith(base)` को लागू करें जो एक फ़ंक्शन लौटाता है: एक संख्या n दी गई है, यह आधार + n लौटाता है। प्रत्येक योजक को अपना आधार याद रहता है।
संकेत दिखाएँ
एक तीर फ़ंक्शन लौटाएं जो बाहरी पैरामीटर से आधार का उपयोग करता है।
3 प्रयासों के बाद समाधान उपलब्ध है