2010-11-29 12 views
5

स्मृति खपत के मामले में, क्या ये समकक्ष हैं या क्या हमें बाद में प्रत्येक ऑब्जेक्ट के लिए एक नया फ़ंक्शन इंस्टेंस मिलता है?बेनामी फ़ंक्शन और मेमोरी खपत

var f=function(){alert(this.animal);} 
var items=[]; 
for(var i=0;i<10;++i) 
{ 
    var item={"animal":"monkey"}; 
    item.alertAnimal=f; 
    items.push(item); 
} 

और

var items=[]; 
for(var i=0;i<10;++i) 
{ 
    var item={"animal":"monkey"}; 
    item.alertAnimal=function(){alert(this.animal);}; 
    items.push(item); 
} 

संपादित

मैं बंद सही ढंग से काम करने के लिए है कि सोच रहा हूँ, ताकि दूसरे उदाहरण वास्तव में एक नया कार्य प्रत्येक पास बन जाएगा। क्या ये सही है?

उत्तर

5

आपको पहली विधि को देखना चाहिए, क्योंकि दूसरी बार जब दुभाषिया उस रेखा को पार करता है तो दूसरा कार्य करता है।

अपने संपादित के बारे में: हम हर समय एक ही दायरे में हैं, क्योंकि जावास्क्रिप्ट ब्लॉक गुंजाइश के बजाय समारोह गुंजाइश है, तो यह हो सकता है optimizable हो, लेकिन मैं एक कार्यान्वयन है कि यह हर पैदा नहीं करता सामना नहीं किया था पहर। मैं इस (संभवतः संभव) अनुकूलन पर भरोसा न करने की अनुशंसा करता हूं, क्योंकि यदि आप इस तकनीक का व्यापक रूप से उपयोग करते हैं तो समर्थन की कमी वाले कार्यान्वयन में स्मृति सीमा से अधिक हो सकता है (जो बुरा है, क्योंकि आप नहीं जानते कि कार्यान्वयन इसे किस प्रकार चलाएगा, है ना?)।

1

मैं एक विशेषज्ञ नहीं हूं, लेकिन ऐसा लगता है कि विभिन्न जावास्क्रिप्ट इंजन इसे विभिन्न तरीकों से संभालने में सक्षम हो सकते हैं।

उदाहरण के लिए, वी 8 में छिपा वर्ग कहा जाता है, जो एक ही संपत्ति तक पहुंचने पर स्मृति खपत को प्रभावित कर सकता है। शायद कोई इसे पुष्टि या अस्वीकार कर सकता है।

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