इस ट्यूटोरियल में, आप उदाहरणों की मदद से जावास्क्रिप्ट क्लोजर के बारे में जानेंगे।
क्लोजर के बारे में जानने से पहले, आपको दो अवधारणाओं को समझने की आवश्यकता है:
- नेस्टेड फंक्शन
- एक समारोह लौट रहा है
जावास्क्रिप्ट नेस्टेड फ़ंक्शन
जावास्क्रिप्ट में, एक फ़ंक्शन में एक अन्य फ़ंक्शन भी हो सकता है। इसे नेस्टेड फंक्शन कहा जाता है। उदाहरण के लिए,
// nested function example // outer function function greet(name) ( // inner function function displayName() ( console.log('Hi' + ' ' + name); ) // calling inner function displayName(); ) // calling outer function greet('John'); // Hi John
उपरोक्त कार्यक्रम में, greet()
फ़ंक्शन में इसके displayName()
अंदर फ़ंक्शन होता है।
एक समारोह लौट रहा है
जावास्क्रिप्ट में, आप एक फ़ंक्शन के भीतर एक फ़ंक्शन भी वापस कर सकते हैं। उदाहरण के लिए,
function greet(name) ( function displayName() ( console.log('Hi' + ' ' + name); ) // returning a function return displayName; ) const g1 = greet('John'); console.log(g1); // returns the function definition g1(); // calling the function
आउटपुट
फंक्शन डिस्प्लेनाम () (कंसोल.लॉग ('हाय' + '' + नाम);) हाय जॉन
उपरोक्त कार्यक्रम में, greet()
फ़ंक्शन displayName
फ़ंक्शन परिभाषा वापस कर रहा है ।
यहाँ, लौटाया गया फंक्शन डेफिनिशन g1 वैरिएबल को असाइन किया गया है। जब आप g1 का उपयोग करके प्रिंट करते हैं console.log(g1)
, तो आपको फ़ंक्शन की परिभाषा मिलेगी।
जी 1 चर में संग्रहीत फ़ंक्शन को कॉल करने के लिए, हम g1()
कोष्ठक के साथ उपयोग करते हैं।
जावास्क्रिप्ट क्लोजर
जावास्क्रिप्ट में, क्लोजर आंतरिक फ़ंक्शन के अंदर से किसी फ़ंक्शन के बाहरी दायरे तक पहुंच प्रदान करता है, भले ही बाहरी फ़ंक्शन बंद हो गया हो। उदाहरण के लिए,
// javascript closure example // outer function function greet() ( // variable defined outside the inner function let name = 'John'; // inner function function displayName() ( // accessing name variable return 'Hi' + ' ' + name; ) return displayName; ) const g1 = greet(); console.log(g1); // returns the function definition console.log(g1()); // returns the value
आउटपुट
function displayName () (// एक्सेसिंग नाम वैरिएबल रिटर्न 'Hi' + '' + name;) Hi John
उपरोक्त उदाहरण में, जब greet()
फ़ंक्शन को कहा जाता है, तो यह फ़ंक्शन की परिभाषा देता है displayName
।
यहां, फ़ंक्शन का g1
संदर्भ है displayName()
।
जब g1()
कहा जाता है, यह अभी भी greet()
कार्य करने के लिए उपयोग किया है।
जब हम दौड़ते हैं console.log(g1)
, तो यह फंक्शन परिभाषा को वापस करता है।
बंद करने की अवधारणा अन्य प्रोग्रामिंग भाषाओं जैसे पायथन, स्विफ्ट, रूबी, आदि के लिए मौजूद है।
आइए एक और उदाहरण देखें।
// closure example function calculate(x) ( function multiply(y) ( return x * y; ) return multiply; ) const multiply3 = calculate(3); const multiply4 = calculate(4); console.log(multiply3); // returns calculate function definition console.log(multiply3()); // NaN console.log(multiply3(6)); // 18 console.log(multiply4(2)); // 8
उपरोक्त कार्यक्रम में, calculate()
फ़ंक्शन एकल तर्क लेता है x
और फ़ंक्शन की फ़ंक्शन परिभाषा को वापस multiply()
करता है। multiply()
समारोह में एक भी तर्क लेता y
है और रिटर्न x * y
।
दोनों multiply3
और multiply4
क्लोजर हैं।
calculate()
समारोह एक पैरामीटर गुजर कहा जाता है x
। जब multiply3
और multiply4
कहा जाता है, तो multipy()
फ़ंक्शन में बाहरी calculate()
फ़ंक्शन के पास x तर्क तक पहुंच होती है ।
डाटा प्राइवेसी
जावास्क्रिप्ट क्लोजर कार्यक्रम की डेटा गोपनीयता में मदद करता है। उदाहरण के लिए,
let a = 0; function sum() ( function increaseSum() ( // the value of a is increased by 1 return a = a + 1; ) return increaseSum; ) const x = sum(); console.log(x()); // 1 console.log(x()); // 2 console.log(x()); // 3 a = a + 1; console.log(a); // 4
उपरोक्त उदाहरण में, sum()
फ़ंक्शन फ़ंक्शन की फ़ंक्शन परिभाषा देता है increaseSum()
।
increaseSum()
फ़ंक्शन के अंदर एक चर बढ़ाया जाता है। हालांकि, फ़ंक्शन के बाहर एक वैरिएबल का मान भी बदला जा सकता है। इस स्थिति में, a = a + 1;
फ़ंक्शन के बाहर वेरिएबल का मान बदलता है।
अब, यदि आप चाहते हैं कि एक चर केवल फ़ंक्शन के अंदर ही बढ़ाया जाए, तो आप एक क्लोजर का उपयोग कर सकते हैं। उदाहरण के लिए,
function sum() ( let a = 0; function increaseSum() ( // the value of a is increased by 1 return a = a + 1; ) return increaseSum; ) let x = sum(); let a = 5; console.log(x()); // 1 console.log(x()); // 2 console.log(a); // 5
उपरोक्त उदाहरण में, sum()
फ़ंक्शन 0 के मान को सेट करता है और increaseSum()
फ़ंक्शन को लौटाता है ।
बंद होने के कारण, भले ही sum()
पहले से ही निष्पादित हो, फिर increaseSum()
भी एक तक पहुंच है और हर बार 1 को जोड़ सकता x()
है जिसे कहा जाता है।
और एक वैरिएबल sum()
फ़ंक्शन के लिए निजी है । इसका मतलब है कि एक चर को केवल sum()
फ़ंक्शन के अंदर ही एक्सेस किया जा सकता है ।
यहां तक कि अगर आप घोषणा करते हैं a
और इसका उपयोग करते हैं, तो यह फ़ंक्शन के a
अंदर चर को प्रभावित नहीं करता sum()
है।
नोट : आम तौर पर, क्लोजर का उपयोग डेटा गोपनीयता के लिए किया जाता है।