जावास्क्रिप्ट में बंद

Mar 18 2023
क्लोजर क्या है और हम वास्तव में इसका उपयोग कब कर सकते हैं? क्लोजर को समझने के लिए, हमें जावास्क्रिप्ट में 2 सरल अवधारणाओं के बारे में जानने की जरूरत है: नेस्टेड फ़ंक्शन और फ़ंक्शन वापस करना। नेस्टेड फ़ंक्शंस जावास्क्रिप्ट में, हमारे पास नेस्टेड फ़ंक्शंस हो सकते हैं।

क्लोजर क्या है और हम वास्तव में इसका उपयोग कब कर सकते हैं?

क्लोजर को समझने के लिए, हमें जावास्क्रिप्ट में 2 सरल अवधारणाओं के बारे में जानने की जरूरत है: नेस्टेड फ़ंक्शन और फ़ंक्शन वापस करना।

नेस्टेड कार्य

जावास्क्रिप्ट में, हमारे पास नेस्टेड फ़ंक्शन हो सकते हैं। आंतरिक फ़ंक्शन के पास बाहरी फ़ंक्शन के चर और पैरामीटर तक पहुंच है।

आइए निम्नलिखित उदाहरण की जाँच करें:

function greetPerson(name) {
  const message = 'Hello';
  
  function displayMessage() {
    console.log(`${message} ${name}!`);
  }

  displayMessage();
}

greetPerson('Alex'); // Hello Alex!

एक समारोह लौट रहा है

बाहरी फ़ंक्शन के अंदर आंतरिक फ़ंक्शन को घोषित करने और लागू करने के अलावा, हम आंतरिक फ़ंक्शन को भी वापस कर सकते हैं ताकि इसे बाहर से लागू किया जा सके।

आइए इसका एक उदाहरण देखें:

function greetPerson(name) {
  const message = 'Hello';
  
  function displayMessage() {
    console.log(`${message} ${name}!`);
  }

  return displayMessage;
}

const displayMessageFunction = greetPerson('Alex');

console.log(typeof(displayMessageFunction)); // function
displayMessageFunction(); // Hello Alex!

समापन

इन 2 अवधारणाओं को समझने के बाद, समापन की "परिभाषा" बहुत सरल है।

क्लोजर का मतलब है कि बाहरी फ़ंक्शन के वापस आने के बाद भी एक आंतरिक फ़ंक्शन के पास चर और इसके बाहरी फ़ंक्शन के पैरामीटर तक पहुंच होती है।

आइए एक और उदाहरण देखें जहां हम देख सकते हैं कि वास्तव में क्लोजर का उपयोग कैसे किया जा सकता है:

function counterFunction() {
 let counter = 0;

 function increaseCounter() {
  return counter += 1;
 }

 return increaseCounter;
}

// counter reffers to the increaseCounter returned by the counterFunction
const counter = counterFunction();

console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3
console.log(counter()); // 4

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

बाहरी फ़ंक्शन counterFunctionभी आंतरिक फ़ंक्शन का संदर्भ देता है increaseCounter, इसलिए जब हम इसे कॉल करते हैं, तो चर का वास्तविक मान counterबदल जाएगा। इस तरह, हम देख सकते हैं कि प्रत्येक कॉल counterके बाद चर का एक नया बढ़ा हुआ मान है ।counter()

क्लोजर का उपयोग कब करें?

हम जावास्क्रिप्ट में एनकैप्सुलेशन प्राप्त करने के लिए क्लोजर का उपयोग कर सकते हैं। इसे विस्तार कार्यान्वयन को छुपाकर पूरा किया जा सकता है। इस तरह, हम निजी चर और कार्य बना सकते हैं।

आइए निम्नलिखित उदाहरण की जाँच करें, जहाँ हम केवल फ़ंक्शंस और ऑब्जेक्ट्स का उपयोग करके कुछ डेटा को एनकैप्सुलेट करना चाहते हैं:

const counter = (function () {
  let privateCounter = 0;

  function changeBy(val) {
    privateCounter += val;
  }

  function increaseCounter() {
    changeBy(1);
  }

  function decreaseCounter() {
    changeBy(-1);
  }

  function decreaseCounter() {
    return privateCounter;
  }

  return { increaseCounter, decreaseCounter, getCounterValue };
})();

console.log(counter.getCounterValue()); // 0

counter.increaseCounter();
counter.increaseCounter();

console.log(counter.getCounterValue()); // 2

counter.decreaseCounter();

console.log(counter.getCounterValue()); // 1

हम केवल increaseCounterऔर को कॉल करके काउंटर के मूल्य को बाहर से नियंत्रित कर सकते हैं decreaseCounter, और हम फ़ंक्शन को कॉल करके मूल्य प्राप्त कर सकते हैं getCounterValue, जो गेटर की तरह व्यवहार करता है।

इस तरह, हम विनिर्देशकों का अनुकरण करने और इनकैप्सुलेशन प्राप्त करने में सक्षम publicहैं private।

सॉफ्टवेयर विकास में यह एक बहुत शक्तिशाली अवधारणा है क्योंकि यह चर और कार्यों में अनपेक्षित संशोधनों को रोकता है जो निजी रहना चाहिए।

बस इतना ही!

जावास्क्रिप्ट में क्लोजर पर इस लेख को पढ़ने के लिए समय निकालने के लिए धन्यवाद। मुझे आशा है कि इसने आपको इस महत्वपूर्ण अवधारणा को बेहतर ढंग से समझने में मदद की है और इसका उपयोग एनकैप्सुलेशन प्राप्त करने और निजी चर और कार्यों को बनाने के लिए कैसे किया जा सकता है!