Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Javascript

जावास्क्रिप्ट में बंद करने के लिए व्यावहारिक उपयोग?

<घंटा/>

एक क्लोजर एक फंक्शन और उस लेक्सिकल वातावरण का संयोजन है जिसके भीतर उस फंक्शन को घोषित किया गया था।

function outerFunc() {
   var name = "TutorialsPoint"; // name is a local variable created by outerFunc
   return function innerFunc() {
      // innerFunc() is the inner function, a closure
      console.log(name); // use variable declared in the parent function
   };
}
let f = outerFunc();
f()

बाहरीफंक () एक स्थानीय चर बनाता है जिसे नाम कहा जाता है और एक फ़ंक्शन जिसे इनरफंक () कहा जाता है। इनरफंक () फ़ंक्शन एक आंतरिक फ़ंक्शन है जिसे बाहरीफ़ंक () के अंदर परिभाषित किया गया है और यह केवल बाहरीफ़ंक () फ़ंक्शन के मुख्य भाग के भीतर उपलब्ध है।

ध्यान दें कि innerFunc() फ़ंक्शन का अपना कोई स्थानीय चर नहीं है। हालांकि, चूंकि आंतरिक कार्यों में बाहरी कार्यों के चरों तक पहुंच होती है, innerFunc() मूल फ़ंक्शन, बाहरीफ़ंक() में घोषित चर नाम तक पहुंच सकता है।

आप देख सकते हैं कि जब आउटरफंक ने निष्पादन पूरा किया तो वह नाम दायरे से बाहर हो गया। लेकिन अगर आप बारीकी से देखें, तो innerFunc जो लौटाया गया था और f को सौंपा गया था, उसके पास अभी भी नाम चर तक पहुंच है। इस प्रकार इनर फंक ने आउटरफंक के लेक्सिकल स्कोप पर एक क्लोजर का गठन किया।

व्यावहारिक उपयोग

निजी तरीकों का अनुकरण करना -जावा जैसी भाषाएं विधियों को निजी घोषित करने की क्षमता प्रदान करती हैं, जिसका अर्थ है कि उन्हें केवल उसी वर्ग में अन्य विधियों द्वारा ही बुलाया जा सकता है। जावास्क्रिप्ट ऐसा करने का एक मूल तरीका प्रदान नहीं करता है, लेकिन क्लोजर का उपयोग करके निजी तरीकों का अनुकरण करना संभव है।

उदाहरण

var counter = (() => {
   var privateCounter = 0;
   let changeBy = (val) => privateCounter += val;
   return {
      increment: () => changeBy(1),
      decrement: () => changeBy(-1),
      value: () => privateCounter
   };
})();
console.log(counter.value());
counter.increment();
counter.increment();
console.log(counter.value());
counter.decrement();
console.log(counter.value());

आउटपुट

0
2
1

इवेंट हैंडलर के साथ प्रयोग करें

for(let i = 0; i < 4; i++) {
   button = buttons[i]
   button.addEventListener("click", alert(i))
}

यदि आपके पास संग्रह बटन में 4 बटन हैं और इस तरह ईवेंट श्रोताओं को जोड़ने का प्रयास करते हैं, तो उन बटनों पर कोई भी क्लिक परिणाम के रूप में अपरिभाषित दे देगा। ऐसा इसलिए है क्योंकि जब उन्हें बुलाया जाएगा, तो मुझे अब परिभाषित नहीं किया जाएगा। इसे हल करने का तरीका i.

. पर एक क्लोजर का परिचय देना है
for(let i = 0; i < 4; i++) {
   button = buttons[i]
   button.addEventListener("click", () => alert(i))
}

  1. जावास्क्रिप्ट में क्लोजर क्या हैं?

    जावास्क्रिप्ट में क्लोजर हमें बाहरी फ़ंक्शन के निष्पादित होने और वापस आने के बाद भी आंतरिक फ़ंक्शन से बाहरी फ़ंक्शन स्कोप तक पहुंचने की अनुमति देता है। इसका मतलब है कि आंतरिक फ़ंक्शन के पास हमेशा बाहरी फ़ंक्शन चर तक पहुंच होगी। जावास्क्रिप्ट में क्लोजर के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE

  1. जावास्क्रिप्ट में फंक्शन प्रोटोटाइप

    जावास्क्रिप्ट में बनाए गए कार्यों में हमेशा जावास्क्रिप्टइंजिन द्वारा जोड़ा गया प्रोटोटाइप गुण होता है। प्रोटोटाइप प्रॉपर्टी एक ऑब्जेक्ट है जिसमें डिफ़ॉल्ट रूप से कंस्ट्रक्टर प्रॉपर्टी होती है। फंक्शन प्रोटोटाइप को − . द्वारा एक्सेस किया जा सकता है functionName.prototype जब फ़ंक्शन कंस्ट्रक्टर का उ

  1. जावास्क्रिप्ट में फंक्शन उधार।

    जावास्क्रिप्ट में विधियों को उधार लेने के लिए कॉल (), लागू () और बाइंड () का उपयोग किया जाता है। जावास्क्रिप्ट में उधार लेने के तरीकों के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="v