जावास्क्रिप्ट में क्लोजर
यह लेख जावास्क्रिप्ट में क्लोजर को समझाता है।
YouTube Video
जावास्क्रिप्ट में क्लोजर
जावास्क्रिप्ट में, 'क्लोजर' सबसे महत्वपूर्ण और शक्तिशाली अवधारणाओं में से एक है। क्लोजर को समझकर, आप कई परिस्थितियों में उपयोगी ज्ञान प्राप्त कर सकते हैं, जैसे कि फ़ंक्शन का व्यवहार और स्कोप, साथ ही जावास्क्रिप्ट की असिंक्रोनस प्रोसेसिंग और इवेंट हैंडलिंग। यहां, हम क्लोजर की मूल परिभाषा से लेकर ठोस उदाहरणों और उनके उपयोगों तक सब कुछ विस्तार से समझाएंगे।
क्लोजर क्या है?
क्लोजर उस तंत्र को संदर्भित करता है जिसके द्वारा एक फ़ंक्शन अपनी निर्माण स्कोप के भीतर वेरिएबल्स तक पहुंच सकता है, भले ही उसे उस स्कोप के बाहर से कॉल किया जाए। क्लोजर का उपयोग करके, फ़ंक्शन के लिए बाहरी वेरिएबल्स को लगातार 'याद' करना संभव हो जाता है।
क्लोज़र निम्नलिखित दो तत्वों से मिलकर बनते हैं।
-
फ़ंक्शन परिभाषा (स्वयं फ़ंक्शन)
-
वह स्कोप जिसमें फ़ंक्शन परिभाषित किया गया है (वेरिएबल्स और अन्य फ़ंक्शन जो स्वयं फ़ंक्शन के बाहर हैं)
जावास्क्रिप्ट में, क्लोजर संभव हैं क्योंकि फ़ंक्शंस में उन वेरिएबल्स तक पहुंचने की क्षमता होती है जो उनके निर्माण स्कोप में होते हैं।
मूल उदाहरण
पहले, चलिए क्लोजर के एक मूल उदाहरण को देखते हैं। नीचे दिए गए कोड में, outerFunction
नामक एक फ़ंक्शन को लौटाता है जिसे innerFunction
कहा जाता है। महत्वपूर्ण बिंदु यह है कि innerFunction
उस वेरिएबल count
तक पहुंच सकता है जो outerFunction
के स्कोप में परिभाषित है।
1function outerFunction() {
2 let count = 0;
3
4 function innerFunction() {
5 count++;
6 console.log(`Current count: ${count}`);
7 }
8
9 return innerFunction;
10}
11
12const counter = outerFunction();
13counter(); // Current count: 1
14counter(); // Current count: 2
15counter(); // Current count: 3
क्लोजर कैसे काम करते हैं
जैसा कि ऊपर के उदाहरण में देखा गया है, count
को innerFunction
के द्वारा बनाए रखा जाता है, भले ही outerFunction
निष्पादित हो चुका हो। innerFunction
outerFunction
के स्कोप तक पहुंचना जारी रख सकता है, और इस प्रकार count
innerFunction
के अंदर अपडेट होता है। यह क्लोजर का मूल तंत्र है।
innerFunction
को counter
वेरिएबल में असाइन किया गया है, और हम देख सकते हैं कि count
की स्थिति संरक्षित है, भले ही outerFunction
पहले ही निष्पादन समाप्त कर चुका हो। यह इसलिए होता है क्योंकि जावास्क्रिप्ट फ़ंक्शन परिभाषा के समय की स्कोप को लगातार 'याद' करता है।
अनुप्रयोग: निजी वेरिएबल्स के रूप में क्लोजर
क्लोज़र को ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में 'निजी वेरिएबल्स' की तरह उपयोग किया जा सकता है। आमतौर पर, JavaScript में, ऑब्जेक्ट प्रॉपर्टीज़ को बाहर से सीधे एक्सेस किया जा सकता है, लेकिन क्लोज़र का उपयोग करके, फंक्शन स्कोप के भीतर वेरिएबल्स को बाहर से सीधे छेड़छाड़ से बचाना संभव है।
अगले उदाहरण में, createCounter
फंक्शन क्लोज़र का उपयोग करके एक काउंटर बनाता है और एक निजी वेरिएबल count
के साथ एक काउंटर वापस करता है।
1function createCounter() {
2 let count = 0;
3
4 return {
5 increment: function() {
6 count++;
7 console.log(`Count: ${count}`);
8 },
9 decrement: function() {
10 count--;
11 console.log(`Count: ${count}`);
12 },
13 getCount: function() {
14 return count;
15 }
16 };
17}
18
19const myCounter = createCounter();
20myCounter.increment(); // Count: 1
21myCounter.increment(); // Count: 2
22myCounter.decrement(); // Count: 1
23console.log(myCounter.getCount()); // 1
इस उदाहरण में, count
createCounter
फंक्शन के स्कोप के भीतर है, इसलिए इसे बाहर से सीधे एक्सेस नहीं किया जा सकता। हालांकि, इसे increment
और decrement
मेथड्स के माध्यम से नियंत्रित किया जा सकता है। इस तरह, क्लोज़र का उपयोग करके, आप JavaScript में निजी वेरिएबल्स की अवधारणा को शामिल कर सकते हैं।
क्लोज़र के व्यावहारिक उदाहरण
कॉलबैक फ़ंक्शन्स के साथ संयोजन
क्लोज़र का उपयोग अक्सर कॉलबैक फ़ंक्शन्स के साथ गैर-समानांतर (asynchronous) प्रसंस्करण को प्रबंधित करने के लिए किया जाता है। उदाहरण के लिए, चलिए एक टाइमर का उपयोग करते हुए एक उदाहरण पर विचार करते हैं।
1function startTimer(duration) {
2 let timeLeft = duration;
3
4 function countdown() {
5 console.log(`Time left: ${timeLeft} seconds`);
6 timeLeft--;
7
8 if (timeLeft >= 0) {
9 setTimeout(countdown, 1000);
10 }
11 }
12
13 countdown();
14}
15
16startTimer(5);
17// Time left: 5 seconds
18// Time left: 4 seconds
19// Time left: 3 seconds
20// Time left: 2 seconds
21// Time left: 1 second
22// Time left: 0 seconds
इस उदाहरण में, countdown
फ़ंक्शन startTimer
के स्कोप के भीतर timeLeft
वेरिएबल को एक्सेस करता है। इस तरह, क्लोज़र टाइमर जैसे गैर-समानांतर प्रसंस्करण के लिए बहुत उपयोगी हैं, क्योंकि वे समय के साथ वेरिएबल्स की स्थिति बनाए रखते हैं।
इवेंट हैंडलर्स
क्लोज़र इवेंट हैंडलर्स स्थापित करते समय भी सुविधाजनक होते हैं। नीचे दिए गए उदाहरण में, एक क्लोज़र का उपयोग बटन पर क्लिक की गई बार को रिकॉर्ड करने के लिए किया गया है।
1function setupClickCounter(buttonId) {
2 let clickCount = 0;
3
4 const button = document.getElementById(buttonId);
5 button.addEventListener('click', function() {
6 clickCount++;
7 console.log(`Button clicked ${clickCount} times`);
8 });
9}
10
11setupClickCounter('myButton');
इस मामले में, clickCount
हर क्लिक के साथ बढ़ता है, और इसकी वैल्यू संरक्षित रहती है। क्लोज़र का उपयोग करके, आप प्रत्येक बटन को एक स्वतंत्र काउंटर असाइन कर सकते हैं।
निष्कर्ष
क्लोज़र एक अवधारणा है जो JavaScript की लचीलापन और शक्ति का प्रतीक है। वे वेरिएबल्स को फंक्शन स्कोप के भीतर बंद रखते हैं और उन वेरिएबल्स पर बाहरी रूप से एक्सेस किए जा सकने वाले फंक्शन्स के माध्यम से ऑपरेशन की अनुमति देते हैं। इस तंत्र को समझकर और उपयोग करके, आप JavaScript कोडिंग में अधिक उन्नत तकनीकों को हासिल कर सकते हैं।
क्लोज़र का उपयोग विभिन्न स्थितियों में किया जाता है, जैसे इवेंट हैंडलिंग, गैर-समानांतर प्रसंस्करण से लेकर ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के स्यूडो-इम्प्लिमेंटेशन तक।
आप हमारे YouTube चैनल पर Visual Studio Code का उपयोग करके ऊपर दिए गए लेख के साथ आगे बढ़ सकते हैं। कृपया YouTube चैनल को भी देखें।