मान लिया जाये कि मैं इस समारोह है, जो (कुछ अजीब कारण के लिए) फोन करने वाले के लिए अपनी arguments
ऑब्जेक्ट था:क्या तर्क लीक ऑब्जेक्ट करता है?
function example(a, b/* ...*/) {
var c = // some processing
return arguments;
}
एक मंगलाचरण (var d=example();
) example
की चर वातावरण को रोकने का परिणाम भंडारण करता है (a
युक्त, b
, c
आदि) कचरे से एकत्र होने से? Arguments object के आंतरिक सेटर्स और गेटर्स अभी भी इसे बंद कर सकते हैं, जैसे बंद होने से वापस किए गए फ़ंक्शन की तरह।
मुझे पता है कि शायद ही कभी उपयोग का मामला है (और तर्कों के चारों ओर गुजरना बुरा अभ्यास माना जाता है, अधिकांशतः सरणी की समानता के कारण), लेकिन यह एक सैद्धांतिक सवाल है। विभिन्न EcmaScript कार्यान्वयन कैसे संभालते हैं?
'तर्क' के बारे में अजीब चीज यह है कि नामित पैरामीटर वास्तव में छद्म-सरणी के तत्वों के लिए ** उपनाम ** हैं। कोशिश करो! यदि आप 'तर्क [0]' बदलते हैं, तो 'ए' भी बदल जाएगा! मुझे नहीं लगता कि यह उस कारण से लीक है। – Pointy
वास्तव में? मैंने सोचा कि यह दूसरा रास्ता था: 'तर्क' [0] '''' के लिए उपनाम है :-) spec में वर्णित एल्गोरिदम इंगित करता है कि 'तर्क' के सूचकांक" पैरामीटर मैप "के साथ सेटर्स और गेटर्स थे आमंत्रण के पर्यावरण रिकॉर्ड से लिंक - इमो को रिसाव करने का एक संभावित कारण। यही कारण है कि मैं वास्तविक कार्यान्वयन के बारे में भी पूछ रहा हूं ... – Bergi
ठीक है मुझे लगता है कि यह एक रहस्य है जो एक उपनाम है जिसके लिए :-) मैं जो सोच रहा हूं वह यह है कि तर्क मूल रूप से ** ** ** है पैरामीटर का सेट, इसे बंद करने या किसी भी संदर्भ के संदर्भ की आवश्यकता नहीं है, इसलिए स्मृति का उपयोग करने के अलावा यह सीधे कुछ भी "पिन" नहीं करता है। हालांकि, यह सिर्फ एक झटका है, और मुझे असली कहानी नहीं पता है। – Pointy