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

बंद होने से स्मृति रिसाव कैसे हो सकता है और इसे कैसे रोका जा सकता है?

<घंटा/>

बंद

जावास्क्रिप्ट की ताकत में से एक बंद है। जावास्क्रिप्ट मूल कार्यों के चरों तक पहुँचने के लिए नेस्टेड फ़ंक्शंस, फ़ंक्शन के अंदर एक फ़ंक्शन की अनुमति देता है। बाहरी फ़ंक्शन के वैरिएबल को किसी आंतरिक फ़ंक्शन द्वारा एक्सेस करने की इस प्रक्रिया को क्लोजर कहा जाता है। स्मृति रिसाव तब होता है जब एक घोषित चर आंतरिक नेस्टेड फ़ंक्शन के लिए स्वचालित रूप से उपलब्ध होता है और आंतरिक नेस्टेड फ़ंक्शन में संदर्भित नहीं होने के बावजूद स्मृति में रहता है।

निम्नलिखित उदाहरण में 'childFunction' बाहरी फ़ंक्शन 'parentFunction' के भीतर परिभाषित आंतरिक कार्य है। जब एक पैरामीटर "बाहरी वैल" के साथ 'parentFunction' को कॉल किया जाता है, तो बाहरी चर a को "बाहरी वैल" का मान दिया जाता है। फ़ंक्शन एक पॉइंटर के साथ आंतरिक फ़ंक्शन "childFunction" पर लौटता है, जो इसमें निहित है चर 'वैल'।

बाहरी फ़ंक्शन का स्थानीय चर अभी भी मौजूद रहेगा, भले ही बाहरी फ़ंक्शन वापस आ गया हो। जावास्क्रिप्ट में जिस पल पेरेंट फंक्शन कहा जाता है, एक संपत्ति 'ए' के ​​साथ एक स्कोप ऑब्जेक्ट बनाया जाता है। इस संपत्ति में arg1 का मान होता है, जिसे "बाहरी वैल" भी कहा जाता है। इसी तरह जब पेरेंटफंक्शन वापस आता है, तो यह आंतरिक फ़ंक्शन (चाइल्डफंक्शन) लौटाएगा, जो कि वेरिएबल वैल में निहित है।

चूंकि आंतरिक फ़ंक्शन बाहरी फ़ंक्शन के चर का संदर्भ रखता है, इसलिए संपत्ति 'ए' के ​​साथ स्कोप ऑब्जेक्ट कचरा नहीं होगा।

उदाहरण

<html>
<body>
<script>
   window.onload= function parentFunction(arg1) {
      var a = arg1;
      return function childFunction (arg2)
   {
      alert( a +" "+ arg2);
   };
   };
   var val = parentFunction("outer val");
   val("inner val");
</script>
</body>
</html>

स्मृति रिसाव से बचना

एक और फ़ंक्शन जोड़ना

एक और फ़ंक्शन जोड़ने से, दो आंतरिक कार्य होंगे। चूंकि दो आंतरिक कार्य हैं, कोई भी फ़ंक्शन बाहरी फ़ंक्शन के चर को पूरी तरह से बंद करके वहां संदर्भित नहीं कर सकता है।

जब बंद नहीं होगा तो स्मृति रिसाव की संभावना कम होगी।

उदाहरण

<html>
<body>
<script>
   window.onload=function parentFunction(){
      var Obj1 = function childFunction1()
      {
         document.write("the leak is avoided");
      };
   (function childFunction2(){
      var obj2 = document.getElementById("closure");
      obj2.onclick=Obj1
      })();
   };
</script>
<input type = "button" id="closure" value ="Click Here">
</body>
</html>

एक बार कोड निष्पादित होने के बाद एक बटन निम्नानुसार प्रदर्शित होगा

बंद होने से स्मृति रिसाव कैसे हो सकता है और इसे कैसे रोका जा सकता है?

बटन दबाने के बाद हमें निम्न प्रकार से आउटपुट मिलेगा

आउटपुट

the leak is avoided

  1. Adware क्या है और आप इसे कैसे रोक सकते हैं?

    एडवेयर क्या है? बधाई हो!!! आपको एक मुफ़्त IPHONE के लिए चुना गया है!!!! यहां क्लिक करें!!!! क्या आप कभी इंटरनेट ब्राउज़ कर रहे हैं, अपने दिन के बारे में जा रहे हैं, जब अचानक आप इन संदेशों से भर जाते हैं? अगर आपको लगता है कि वे शायद स्पैम थे, तो आप सही हैं! यदि आप इस तरह के एक टन विज्ञापन देख रहे

  1. डीएनएस लीक क्या है और इसे कैसे रोकें?

    इंटरनेट कनेक्शन के लिए रिमोट एक्सेस के बढ़ते उपयोग को देखते हुए हैकिंग के प्रयास स्मार्ट हो गए हैं। सार्वजनिक वाई-फाई कनेक्टिविटी की उपस्थिति ने इंटरनेट सेवा प्रदाताओं (आईएसपी) द्वारा पेश किए गए कनेक्शनों में गंभीर कमजोरियां भी पैदा कर दी हैं। इसके अलावा, व्यक्तिगत कंप्यूटर और कॉर्पोरेट नेटवर्क पर स

  1. स्पाइवेयर और एडवेयर को कैसे रोकें?

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