जावास्क्रिप्ट मास्टर करने के लिए सबसे कठिन प्रोग्रामिंग भाषाओं में से एक है। कभी-कभी वरिष्ठ डेवलपर भी उनके द्वारा लिखे गए कोड के आउटपुट की भविष्यवाणी करने में सक्षम नहीं होते हैं। जावास्क्रिप्ट में अधिक भ्रमित करने वाली अवधारणाओं में से एक क्लोजर है। शुरुआती आमतौर पर अवधारणा पर फंस जाते हैं-चिंता न करें। क्लोजर को बेहतर ढंग से समझने में आपकी मदद करने के लिए यह लेख आपको धीरे-धीरे बुनियादी उदाहरणों से परिचित कराएगा। आएँ शुरू करें।
क्लोजर क्या हैं?
क्लोजर एक फंक्शन और उसके लेक्सिकल एनवायरनमेंट की संरचना है, जिसमें क्लोजर क्रिएशन पर फंक्शन के स्कोप में कोई भी वेरिएबल शामिल है। सरल शब्दों में, एक बाहरी फ़ंक्शन और एक आंतरिक फ़ंक्शन पर विचार करें। आंतरिक फ़ंक्शन के पास बाहरी फ़ंक्शन के दायरे तक पहुंच होगी।
कुछ जावास्क्रिप्ट क्लोजर उदाहरणों को देखने से पहले, आपको लेक्सिकल स्कोपिंग को समझना होगा।
एक लेक्सिकल पर्यावरण क्या है?
शाब्दिक वातावरण अपने मूल वातावरण के साथ-साथ स्थानीय स्मृति है। नीचे दिए गए उदाहरण को देखें और निम्नलिखित कोड के आउटपुट का अनुमान लगाएं:
फ़ंक्शन बाहरी () {
चलो एक = 10;
कंसोल.लॉग (वाई);
भीतरी();
फ़ंक्शन इनर () {
कंसोल.लॉग (ए);
कंसोल.लॉग (वाई);
}
}
चलो y = 9;
बाहरी ();
आउटपुट होगा 9, 10, 9. आंतरिक फ़ंक्शन के पास इसके माता-पिता के चरों तक पहुंच है, the बाहरी () समारोह। इसलिए भीतरी() समारोह का उपयोग कर सकते हैं परिवर्तनीय ए. भीतरी() समारोह भी पहुँच सकते हैं चर y की अवधारणा के कारण गुंजाइश श्रृंखला.
बाहरी फ़ंक्शन का जनक वैश्विक है, और का जनक भीतरी() समारोह है बाहरी () समारोह। इसलिए भीतरी() फ़ंक्शन के पास अपने माता-पिता के चरों तक पहुंच है। यदि आप चर का उपयोग करने का प्रयास करते हैं ए वैश्विक दायरे में, यह एक त्रुटि प्रदर्शित करेगा। अतः आप कह सकते हैं कि भीतरी() फ़ंक्शन शाब्दिक रूप से अंदर है बाहरी () समारोह, और के शाब्दिक माता पिता बाहरी () समारोह वैश्विक है।
जावास्क्रिप्ट क्लोजर उदाहरण समझाया गया
चूंकि आपने शाब्दिक वातावरण के बारे में जान लिया है, आप आसानी से निम्नलिखित कोड के आउटपुट का अनुमान लगा सकते हैं:
फ़ंक्शन ए () {
मान लीजिए x = 10;
फ़ंक्शन बी () {
कंसोल.लॉग (एक्स);
}
बी();
}
ए();
आउटपुट है 10. जबकि आप पहली नज़र में इसका अनुमान नहीं लगा सकते हैं, यह जावास्क्रिप्ट में बंद होने का एक उदाहरण है। क्लोजर एक फ़ंक्शन और उनके शाब्दिक वातावरण से ज्यादा कुछ नहीं हैं।
आइए एक उदाहरण पर विचार करें जहां एक दूसरे के अंदर तीन कार्य निहित हैं:
फ़ंक्शन ए () {
मान लीजिए x = 10;
फ़ंक्शन बी () {
फ़ंक्शन सी () {
फ़ंक्शन डी () {
कंसोल.लॉग (एक्स);
}
डी();
}
सी();
}
बी();
}
ए();
क्या इसे अभी भी बंद कहा जाएगा? इसका जवाब है हाँ। फिर से, एक क्लोजर अपने लेक्सिकल पैरेंट के साथ एक फंक्शन है। फ़ंक्शन का शाब्दिक जनक डी() है सी(), और गुंजाइश श्रृंखला की अवधारणा के कारण, कार्य डी() बाहरी कार्यों और वैश्विक लोगों के सभी चरों तक पहुंच है।
एक और दिलचस्प उदाहरण देखें:
फ़ंक्शन एक्स () {
चलो एक = 9;
वापसी समारोह वाई () {
कंसोल.लॉग (ए);
}
}
चलो बी = एक्स ();
आप किसी फ़ंक्शन के अंदर एक फ़ंक्शन वापस कर सकते हैं, एक चर के लिए एक फ़ंक्शन असाइन कर सकते हैं, और एक फ़ंक्शन को a. के अंदर पास कर सकते हैं जावास्क्रिप्ट में कार्य. यह भाषा की सुंदरता है। क्या आप अनुमान लगा सकते हैं कि यदि आप वेरिएबल प्रिंट करते हैं तो आउटपुट क्या होगा बी? यह फंक्शन प्रिंट करेगा वाई (). कार्यक्रम एक्स() एक फ़ंक्शन देता है वाई (). इसलिए, चर बी एक समारोह संग्रहीत करता है। अब, क्या आप अनुमान लगा सकते हैं कि यदि आप वेरिएबल कहते हैं तो क्या होगा? बी? यह वेरिएबल के मान को प्रिंट करता है ए: 9.
आप क्लोजर का उपयोग करके डेटा छिपाना भी प्राप्त कर सकते हैं। बेहतर समझ के लिए, ब्राउज़र पर "बटन" नाम की एक आईडी वाले बटन वाले उदाहरण पर विचार करें। आइए इसमें एक क्लिक इवेंट श्रोता संलग्न करें।
अब आपको यह गणना करने की आवश्यकता है कि बटन कितनी बार क्लिक किया गया है। ऐसा करने के दो तरीके हैं।
- एक वैश्विक चर गणना बनाएं और इसे ऑनक्लिक बढ़ाएं। लेकिन इस पद्धति में एक खामी है। वैश्विक चरों में संशोधन करना आसान है क्योंकि वे आसानी से सुलभ हैं।
- हम क्लोजर का उपयोग करके डेटा छिपाना प्राप्त कर सकते हैं। आप पूरा लपेट सकते हैं एडवेन्ट लिस्टनर () एक समारोह के अंदर समारोह। यह बंद कर देता है। और एक क्लोजर बनाने के बाद, आप a. बना सकते हैं गणना चर और इसके मूल्य को ऑनक्लिक बढ़ाएं। इस विधि का प्रयोग करने से चर में बना रहेगा कार्यात्मक गुंजाइश, और कोई संशोधन नहीं किया जा सकता है।
सम्बंधित: वेबसाइटों का हिडन हीरो: डोम को समझना
क्लोजर क्यों महत्वपूर्ण हैं?
न केवल जब जावास्क्रिप्ट की बात आती है, बल्कि अन्य प्रोग्रामिंग भाषाओं में भी क्लोजर बहुत महत्वपूर्ण होते हैं। वे बहुत सारे परिदृश्यों में उपयोगी होते हैं जहाँ आप उनके निजी दायरे में चर बना सकते हैं या अन्य मामलों के साथ कार्यों को जोड़ सकते हैं।
फ़ंक्शन संरचना के इस उदाहरण पर विचार करें:
कास्ट गुणा = (ए, बी) => ए * बी;
कॉन्स्ट मल्टीप्लायबी 2 = एक्स => गुणा (10, एक्स);
कंसोल.लॉग (multiplyBy2(9));
हम क्लोजर का उपयोग करके उसी उदाहरण को लागू कर सकते हैं:
कास्ट गुणा = फ़ंक्शन (ए) {
वापसी समारोह (बी) {
वापसी ए*बी
}
}
कास्ट गुणाबाय2 = गुणा (2);
कंसोल.लॉग (multiplyBy2(10))
फ़ंक्शंस निम्नलिखित परिदृश्यों में क्लोजर का उपयोग कर सकते हैं:
- फंक्शन करी को लागू करने के लिए
- डेटा छिपाने के लिए इस्तेमाल किया जाना
- घटना श्रोताओं के साथ प्रयोग करने के लिए
- सेटटाइमआउट विधि में उपयोग करने के लिए ()
आपको अनावश्यक रूप से क्लोजर का उपयोग नहीं करना चाहिए
जब तक वास्तव में आवश्यकता न हो, बंद करने से बचने की अनुशंसा की जाती है क्योंकि वे आपके ऐप के प्रदर्शन को कम कर सकते हैं। क्लोजर का उपयोग करने से बहुत अधिक मेमोरी खर्च होगी, और यदि क्लोजर को ठीक से हैंडल नहीं किया जाता है, तो यह हो सकता है स्म्रति से रिसाव.
जावास्क्रिप्ट के कचरा संग्रहकर्ता द्वारा बंद चर को मुक्त नहीं किया जाएगा। जब आप क्लोजर के अंदर वेरिएबल्स का उपयोग करते हैं, तो मेमोरी को कचरा संग्रहकर्ता द्वारा मुक्त नहीं किया जाता है क्योंकि ब्राउज़र को लगता है कि वेरिएबल अभी भी उपयोग में हैं। इसलिए, ये वेरिएबल मेमोरी का उपभोग करते हैं और ऐप के प्रदर्शन को कम करते हैं।
यहां एक उदाहरण दिया गया है जो दिखाता है कि कैसे बंद होने के अंदर चर कचरा एकत्र नहीं किया जाएगा।
फ़ंक्शन एफ () {
कास्ट एक्स = 3;
वापसी समारोह आंतरिक () {
कंसोल.लॉग (एक्स);
}
}
एफ()();
चर x यहां स्मृति की खपत होती है, भले ही इसका अक्सर उपयोग नहीं किया जाता है। कचरा संग्रहकर्ता इस मेमोरी को खाली नहीं कर पाएगा क्योंकि यह क्लोजर के अंदर है।
जावास्क्रिप्ट अंतहीन है
जावास्क्रिप्ट में महारत हासिल करना एक अंतहीन काम है, क्योंकि बहुत सारी अवधारणाएँ और रूपरेखाएँ हैं जो आमतौर पर अनुभवी डेवलपर्स द्वारा स्वयं नहीं खोजी जाती हैं। आप मूल बातें सीखकर और उनका बार-बार अभ्यास करके जावास्क्रिप्ट पर अपने हैंडल में उल्लेखनीय रूप से सुधार कर सकते हैं। इटरेटर और जेनरेटर कुछ अवधारणाएं हैं जो साक्षात्कार जावास्क्रिप्ट साक्षात्कार के दौरान पूछते हैं।
जेएस में इटरेटर और जेनरेटर विधियों को लटकाएं।
आगे पढ़िए
- प्रोग्रामिंग
- जावास्क्रिप्ट
- प्रोग्रामिंग
- कोडिंग युक्तियाँ
उन्नति एक उत्साही फुल स्टैक डेवलपर है। वह विभिन्न प्रोग्रामिंग भाषाओं का उपयोग करके प्रोजेक्ट बनाना पसंद करती है। अपने खाली समय में, वह गिटार बजाना पसंद करती है और खाना पकाने की शौकीन है।
हमारे न्यूज़लेटर की सदस्यता लें
तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!
सब्सक्राइब करने के लिए यहां क्लिक करें