2013-05-31 5 views
6

लें इस कोड:कोई संदर्भ वापस नहीं होने पर एक गुंजाइश समाप्त हो जाती है? उदाहरण के लिए

var test = (function(){ 
    var name = 'rar'; 
    return function foo(){ 
    console.log('test'); 
    }; 
}()); 

footestभीतरी दायरे में name के सभी संदर्भ बिना के लिए वापस आ जाता है। name का क्या होता है? क्या यह नष्ट हो गया है? या क्या यह अस्तित्व में रहता है और लौटे हुए फ़ंक्शन के साथ लटकता रहता है, लेकिन इसका उपयोग नहीं किया जा सकता है? पहला मामला, निम्नलिखित कर रही करने के समान होगा, जैसे कि name समीकरण ?:

var test = function foo(){ 
    console.log('test'); 
}; 

यहाँ का हिस्सा कभी नहीं था एक और बात है:

var test2 = (function(){ 
    var name = 'rar'; 
    var age = '20'; 
    return function foo(){ 
    console.log(age); 
    }; 
}()); 

agefoo द्वारा संदर्भित किया जाता है और एक बंद बनेगी । हालांकि, name अभी भी किसी भी चीज़ द्वारा संदर्भित नहीं है। इस मामले में name का क्या होता है? क्या यह नष्ट हो गया है? या क्या यह अस्तित्व में रहता है और लौटे हुए फ़ंक्शन के साथ लटकता रहता है, लेकिन इसका उपयोग नहीं किया जा सकता है?

+2

http://stackoverflow.com/a/864549/2269749 – BlitZ

+0

@CORRUPT उत्तर यह इंगित करते हैं कि क्या होता है कार्यान्वयन पर निर्भर करता है। तो इसका मतलब है, सबसे बुरे मामले में, 'नाम' रहेगा, क्या यह सही है? – Joseph

+0

हां। ब्राउज़रों के पास अलग-अलग जेएस जीसी इंजन हैं, प्रत्येक इस मामले में अलग-अलग कार्य कर सकते हैं। स्मृति रिसाव को रोकने के लिए, एक विकल्प के रूप में 'name = null' पर विचार करें। – BlitZ

उत्तर

4

क्रोम में, name जीसीड होगा; फ़ायरफ़ॉक्स में, name पूरे बंद होने के साथ रखा जाता है। अर्थात? मुझे नहीं पता।

+0

क्या मैं इस संदर्भ के लिए अनुरोध कर सकता हूं कि क्रोम जीसी का नाम क्यों है लेकिन फ़ायरफ़ॉक्स में नहीं? – Joseph

+0

@ जोसेफथीड्रीमर मेरे पास कोई संदर्भ नहीं है, मेरा जवाब पूरी तरह से ब्राउज़र के साथ काम करते समय अवलोकन पर आधारित है। –

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

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