बिल्कुल "रिसाव" नहीं है, लेकिन यह एक आम नुकसान हो सकता है।
var fn = (function() {
var a = "super long string ...";
var b = "useless value";
var c = "Hello, World!";
return function() {
return c;
};
})();
यह एक समारोह है कि एक गुंजाइश का संदर्भ देता है, और उस दायरे में हर एक स्थानीय वर रखा जाएगा, भले ही उन मूल्यों का केवल एक की जरूरत है। इसके परिणामस्वरूप आपको अधिक मेमोरी उपयोग की आवश्यकता होती है, खासकर यदि आपका फ़ंक्शन एक छोटे चर का उपयोग करता है, लेकिन उस दायरे में बड़े मान हैं जिन्हें आपको संदर्भ रखने की आवश्यकता नहीं है।
इसे कैसे ठीक करें?
सरल विकल्प उन चरों को रद्द करना है जिन्हें आप अपने फ़ंक्शन के अंत में परवाह नहीं करते हैं। चर अभी भी दायरे में हैं, लेकिन उनका डेटा जारी किया जाएगा। इसलिए उनके कार्यक्षेत्र जारी किया जा सकता
var fn = (function() {
var a = "super long string ...";
var b = "useless value";
var c = "Hello, World!";
// do stuff with a and b
a = b = null;
return function() {
return c;
};
})();
या आप कुछ भी अस्थायी का उपयोग करता है को तोड़ सकते थे उसके अपने समारोह में वार्स। यह एक बड़ी परियोजना के लिए एक बेहतर समाधान है।
var doSetup = function() {
var a = "super long string ...";
var b = "useless value";
// do stuff with a and b
};
var fn = (function() {
doSetup();
var c = "Hello, World!";
return function() {
return c;
};
})();
स्रोत
2012-01-11 08:25:43
क्या यह वापस नहीं किया था अगर ग लेकिन इस तरह यह करने के लिए संदर्भ बनाया: 'वर fn = (function() { वर एक =" सुपर लंबी स्ट्रिंग ... "; वर ख =" बेकार मूल्य " ; var c = "हैलो, वर्ल्ड!"; फ़ंक्शन() { सी = "कुछ और"; }; })(); ' – crickeys
बिंदु यह है कि यदि फ़ंक्शन अभी भी संदर्भित है, तो इसे बनाए गए क्लोजर स्कोप को स्मृति में रखा जाता है। वास्तव में वह कार्य क्या करता है उस तथ्य पर कोई प्रभाव नहीं पड़ता है। –
तो, आप यह सुनिश्चित करने के लिए पोस्ट किए गए मूल कोड को कैसे ठीक करेंगे, यह अब और लीक नहीं कर रहा था? – crickeys