2011-07-11 8 views
5

मैं अक्सर तीसरे पक्ष जावा स्क्रिप्ट कोड में देखते हैं कि उसके बाद:दस्तावेज़ के बाद आईई के लिए ऑब्जेक्ट को क्यों हटाया जाना चाहिए .getElementById-ed?

var el = document.getElementById(elementId); 

वस्तु अक्सर nulled जाता है और इस आपरेशन के साथ टिप्पणी है कि यह IE के लिए किया जाता है का कहना है:

el = null; // IE 

वास्तविक उद्देश्य क्या है? उस पर कोई संसाधन?

+3

आईआईआरसी, ऐसा इसलिए है क्योंकि आईई अन्यथा क्लोजर स्कॉप्स में _all_ सुलभ चर के संदर्भ रखता है, जो इसे अप्रयुक्त गैर-शून्य संदर्भों को रिसाव बनाता है। – zneak

उत्तर

6

किसी संदर्भ को निक्स करके वे डीओएम ऑब्जेक्ट और जावास्क्रिप्ट ऑब्जेक्ट्स के बीच संबंधित चक्रीय निर्भरता को तोड़ते हैं, जो पुराने आईई में विभिन्न उप-प्रणालियों द्वारा नियंत्रित होते हैं (इस प्रकार कचरा एकत्रित होना असंभव होता है)।

उदाहरण के लिए:

var el = document.getElementById(elementId); 
el.onclick = function() { // here the cyclic reference is created 
    /... 
}; 

जावास्क्रिप्ट सबसिस्टम अब (el तत्व) el तत्व के लिए संदर्भ, और डोम सबसिस्टम जावास्क्रिप्ट ऑब्जेक्ट के संदर्भ (समारोह के साथ साथ यह क्या में बंद कर देता है है है)।

आपको चिंता करने की ज़रूरत नहीं है, हालांकि, यदि आप addEventListener के माध्यम से श्रोताओं को जोड़ते हैं।

सामान्य मेमोरी लीक pitfalls के बारे में और अधिक पढ़ने के लिए, http://www.ibm.com/developerworks/web/library/wa-memleak/ देखें।

संबंधित मुद्दे

 संबंधित मुद्दे