2011-08-29 16 views
5

आजकल मेरा अधिकांश काम जेएस विकास से संबंधित है।आंतरिक फ़ंक्शन की कितनी प्रतियां बनाई जाएंगी

हालांकि मुझे अचानक पता चला कि मैं कुछ प्रश्नों से उलझन में हूं।

चेक इस कोड (मैं एक कस्टम वर्ग के लिए एक विधि जोड़):

MyCustomClass.prototype.fun=function(xx){ 
    this.options={.....} 
    function innerFun01(){} 
    function innerFun02(){} 
} 

अब, यह का उपयोग करें।

var mcc=new MyCustomClass(); 
mcc.fun(xxxx); 

var mcc2=new MyCustomClass(); 
mcc2.fun(xxxx); 

अब, मुझे आश्चर्य है कि कैसे समारोह "innerFun01" और "innerFun02" की कई प्रतियां स्मृति में बनाया जाएगा?

मैं वास्तव में उलझन में हूं।

उत्तर

5

उन कार्यों का निर्माण हर बार "मजेदार" समारोह के रूप में किया जाएगा। (मुझे लगता है कि यह कहना सही है कि उन कार्यों के नए उदाहरण बनाए जाएंगे।)

यह ठीक है। आधुनिक जावास्क्रिप्ट रनटाइम सिस्टम बहुत अच्छे हैं। यह संभव है कि स्रोत कोड का अनुवाद ... अच्छी तरह से जो कुछ भी (थंक्स, मशीन कोड, थ्रेडेड कोड, ...) किया जाता है जब बाहरी फ़ंक्शन को पहले पार्स किया जाता है, ताकि कार्यों का वास्तविक "तत्काल" वास्तव में हो सस्ता।

कई कार्यात्मक भाषाओं में समान विशेषताएं हैं। (let ...) के साथ घोषित एक स्थानीय स्कीम फ़ंक्शन या प्रत्येक बार इसके युक्त फ़ंक्शन को कॉल करने के दौरान कुछ ऐसा ही लाया जाएगा।

+0

क्या यह स्मृति की बर्बादी है? उन्हें बदलने के लिए कोई विचार? लेकिन मैं उन्हें बाहर परिभाषित नहीं करना चाहता, क्योंकि मैं उन्हें बेनकाब नहीं करना चाहता हूं। – hguser

+1

यह वास्तव में स्मृति की बर्बादी नहीं है। वे तत्काल हो जाते हैं, लेकिन फिर 'मज़ा' चलने के बाद बाहर फेंक दिया जाता है। जावास्क्रिप्ट कचरा कलेक्टर जल्द ही उसके साथ आएगा और उन्हें इकट्ठा करेगा और बाहर निकल जाएगा। – Stephen

+1

जो आर्मस्ट्रांग, एरलांग लुमेनरी, डेवलपर्स से "सबसे खूबसूरत कोड लिखने" के लिए आग्रह करके उस भाषा के मुद्दों के बारे में ऐसी चिंताओं का जवाब देता है। कोड लिखें * एल्गोरिदमिक * ध्वनि, और केवल चरम (संभावनाएं) मामलों में ऐसी चीजों के बारे में चिंता करें। – Pointy

0

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

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