जावास्क्रिप्ट क्लोजर

जावास्क्रिप्ट वेरियेबल बराबर है本地स्थानीयग्लोबलया

स्कोपक्लोजरग्लोबल वेरियेबल को

स्थानीय (गोपनीय) को साधारण कर सकते हैं

ग्लोबल वेरियेबलफ़ंक्शन फ़ंक्शन को अपने द्वारा डिफ़ाइन किए गए सभी वेरियेबल की पहुंच कर सकते हैंअंतर्गणितांतर्गत फ़ंक्शन

इंस्टांस

function myFunction() {
    var a = 4;
    return a * a;
} 

अपने आप साबित करें

लेकिन फ़ंक्शन फ़ंक्शन को भी अपने द्वारा डिफ़ाइन किए गए सभी वेरियेबल की पहुंच कर सकते हैंबाह्यवेरियेबल जैसे कि डिफ़ाइन किया गया है:

इंस्टांस

var a = 4;
function myFunction() {
    return a * a;
} 

अपने आप साबित करें

आखिरी उदाहरण मेंa हैग्लोबलवेरियेबल。

वेब पृष्ठ में, ग्लोबल वेरियेबल window ऑब्जेक्ट के अंदर हैं。

ग्लोबल वेरियेबल पृष्ठ (और विंडो) में सभी स्क्रिप्ट द्वारा उपयोग किए जा सकते हैं और संशोधित किए जा सकते हैं。

पहले उदाहरण मेंa हैस्थानीयवेरियेबल。

स्थानीय वेरियेबल केवल उस फ़ंक्शन के अंदर उपयोगी होते हैं जिसके अंदर वे बनाए गए हैं। दूसरे फ़ंक्शन और स्क्रिप्ट के लिए ये दिखाई नहीं देते हैं。

समान नाम के ग्लोबल और स्थानीय वेरियेबल अलग-अलग वेरियेबल हैं। एक को संशोधित करने से दूसरे को प्रभाव नहीं पड़ता है。

द्वाराकीवर्ड var बनाए गए वेरियेबल हमेशा ग्लोबल होते हैं, भले ही वे फ़ंक्शन में बनाए गए हों।

वेरियेबल का जीवनकाल

ग्लोबल वेरियेबल आपके अनुप्रयोग (विंडो, वेब पृष्ठ) के जैसा लंबा समय तक जीवित रहते हैं。

स्थानीय वेरियेबल बहुत लंबा समय तक नहीं जीवित रहते हैं। वे फ़ंक्शन को बुलाए जाने पर बनाए जाते हैं और फ़ंक्शन पूरा होने के बाद मिट जाते हैं。

एक संगणक की समस्या

यदि आप वेरियेबल का उपयोग करके संगणक करना चाहते हैं और आप इस संगणक को सभी फ़ंक्शन के लिए उपयोगी चाहते हैं तो

आप ग्लोबल वेरियेबल और फ़ंक्शन का उपयोग करके संगणक को बढ़ा सकते हैं:

इंस्टांस

// संगणक को शुरूआती सेट करना
var counter = 0;
// संगणक को बढ़ाने वाली फ़ंक्शन
function add() {
  counter += 1;
}
// तीन बार add() को बुलाया जाता है
एड();
एड();
एड();
// इस समय संगणक 3 होना चाहिए

अपने आप साबित करें

उपरोक्त समाधान को एक समस्या है: पृष्ठ पर कोई भी कोड संगणक को बदल सकता है बिना कि यह add() को बुलाया जाए।

add() फ़ंक्शन के लिए, संगणक स्थानीय होना चाहिए ताकि अन्य कोड इसे बदलने के लिए इसे बदलने के लिए नहीं कर सके:

इंस्टांस

// संगणक को शुरूआती सेट करना
var counter = 0;
// संगणक को बढ़ाने वाली फ़ंक्शन
function add() {
  var counter = 0; 
  counter += 1;
}
// तीन बार add() को बुलाया जाता है
एड();
एड();
एड();
// इस समय संगणक 3 होना चाहिए। लेकिन यह 0 है।

अपने आप साबित करें

यह उपयोगी नहीं है क्योंकि हम ग्लोबल संगणक को दिखाते हैं न कि स्थानीय संगणक को。

फ़ंक्शन को उसे वापस करके हम ग्लोबल संगणक को हटा सकते हैं और स्थानीय संगणक की पहुंच कर सकते हैं:

इंस्टांस

// संगणक को बढ़ाने वाली फ़ंक्शन
function add() {
  var counter = 0; 
  counter += 1;
  return counter;
}
// तीन बार add() को बुलाया जाता है
एड();
एड();
एड();
// इस समय संगणक 3 होना चाहिए। लेकिन यह 1 है।

अपने आप साबित करें

यह उपयोगी नहीं है क्योंकि हम हर बार फ़ंक्शन को बुलाते समय स्थानीय संगणक को पुन:सेट करते हैं。

जावास्क्रिप्ट अंतर्गणितांतर्गत फ़ंक्शन इस समस्या को हल कर सकता है。

जावास्क्रिप्ट गहन फ़ंक्शन

सभी फ़ंक्शन ग्लोबल स्कोप की पहुंच कर सकते हैं。

वास्तव में, जावास्क्रिप्ट में सभी फ़ंक्शन उनके 'ऊपर' के स्कोप की पहुंच करने का अधिकार हैं。

जावास्क्रिप्ट गहन फ़ंक्शन समर्थित करता है। गहन फ़ंक्शन उपरी स्कोप की पहुंच कर सकते हैं。

इस उदाहरण में, अंतर्गणितांतर्गत फ़ंक्शन प्लस() अपने मातृगणितांतर्गत पहुंच सकते हैं: counter संगणक विचारण:

इंस्टांस

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();     
    return counter; 
}

अपने आप साबित करें

इस तरह काउंटर दिक्कत को सुलझाया जा सकता है, अगर हम बाहर से इसे देख सकें प्लस() फ़ंक्शन।

हमें एक बार ही चलने वाली फ़ंक्शन की जरूरत है काउंटर = 0 के तरीके से।

हमें क्लोजर (closure) की जरूरत है।

जावास्क्रिप्ट क्लोजर

स्वयं-आवर्ती फ़ंक्शन याद करते हैं? इस फ़ंक्शन क्या करेगा?

इंस्टांस

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();
एड();
एड();
एड();
// काउंटर अभी 3 है 

अपने आप साबित करें

उदाहरण व्याख्या

वेरिएबल एड का असामान्य असामान्य

यह स्वयं-आवर्ती फ़ंक्शन एक बार ही चलता है।यह काउंटर को शून्य (0) सेट करता है और फ़ंक्शन एक्सप्रेशन वापस करता है।

इस तरह add फ़ंक्शन बन गया।सबसे 'जीवंत' हिस्सा यह है कि यह अपने पैरंट स्कोप के भीतर काउंटर को देख सकता है।

इसे जावास्क्रिप्ट कहा जाता है क्लोजर।यह फ़ंक्शन को 'प्राइवेटइससे 'वेरिएबल' बनना संभव होता है।

काउंटर को इस अनूप फ़ंक्शन के स्कोप द्वारा सुरक्षित किया गया है और केवल add फ़ंक्शन के द्वारा संशोधित किया जा सकता है।

क्लोजर एक ऐसी फ़ंक्शन है जो अपने पैरंट स्कोप को देख सकती है, भले ही पैरंट फ़ंक्शन बंद हो चुका हो।