2013-02-22 56 views
5

है, मैं ECMA 262 5 specification का निष्पादन संदर्भ/लेक्सिकल पर्यावरण अनुभाग पढ़ रहा हूं। (अतिरिक्त बल)क्या फ़ंक्शन अभिव्यक्ति का अपना दायरा/लेक्सिकल वातावरण

एक शाब्दिक पर्यावरण एक विनिर्देश विशिष्ट चरों और कार्यों ECMAScript कोड का शाब्दिक नेस्टिंग संरचना पर आधारित करने के लिए पहचानकर्ता के सहयोग से परिभाषित किया जाता प्रकार है: यह निम्नलिखित में कहा गया है। एक व्याख्यात्मक पर्यावरण में पर्यावरण रिकॉर्ड और बाहरी लेक्सिकल पर्यावरण के संभावित रूप से शून्य संदर्भ शामिल हैं। आम तौर पर एक शाब्दिक पर्यावरण इस तरह के एक FunctionDeclaration, एक WithStatement, या एक TryStatement की एक कैच खंड और एक नया शाब्दिक पर्यावरण हर बार इस तरह के कोड का मूल्यांकन किया जाता बनाई गई है के रूप में ECMAScript कोड के कुछ विशिष्ट वाक्यात्मक संरचना के साथ जुड़ा हुआ है।

मैंने देखा कि यह फ़ंक्शन अभिव्यक्तियों के लिए एक व्याख्यात्मक वातावरण बनाने के बारे में कुछ भी नहीं कहता है। क्या एक व्याख्यात्मक वातावरण फ़ंक्शन अभिव्यक्तियों के लिए बनाया गया है, या केवल फ़ंक्शन घोषणाओं के लिए बनाया गया है? क्या मैं कुछ भूल रहा हूँ?

संपादित: मैं ध्यान दें कि समारोह कोड जिसके कारण मैं भी संदेह में हूँ क्यों समारोह अभिव्यक्ति शाब्दिक पर्यावरण अनुभाग में उल्लेख नहीं है its own execution context होगा,।

+4

क्योंकि उदाहरणों की सूची "जैसे" से शुरू होती है, मुझे नहीं लगता कि यह पूर्ण होने का इरादा है। – Pointy

+0

[धारा 13] (http://www.ecma-international.org/ecma-262/5.1/#sec-13) ऐसा लगता है कि नए शब्दावली वातावरण केवल नामों के साथ फ़ंक्शन अभिव्यक्तियों के लिए बनाए जाते हैं (और अज्ञात फ़ंक्शन के लिए नहीं अभिव्यक्ति या समारोह घोषणाएं)। लेकिन मुझे इसे गलत तरीके से व्याख्या करना होगा। –

उत्तर

3

हाँ, हर समारोह हो जाता है (§10.4.3) इसे अपने ExecutionContext जब इसे कहा जाता है (§13.2.1)। उस नए संदर्भ को LexicalEnvironment (NewDeclarativeEnvironment, §10.2.2.2 द्वारा बनाया गया) के साथ शुरू किया गया है, जो [[Scope]] फ़ंक्शन के प्राप्तकर्ता से प्राप्त होता है - यानी LexicalEnvironment इसे घोषित/"व्यक्त" (§13) में घोषित किया गया था।

जैसा कि @ पॉइंटी ने बताया, जिस वाक्य पर आप फंसे हुए हैं, उन्हें पूरी तरह से सूचीबद्ध नहीं किया गया है: "... कुछ [संरचना] जैसे ..."।

2

एक तत्काल कार्य में एक गुंजाइश है। इससे कोई फ़र्क नहीं पड़ता कि इसे फ़ंक्शन घोषणा कथन या फ़ंक्शन इंस्टेंटेशन एक्सप्रेशन के हिस्से के रूप में तत्काल किया गया था या नहीं।

(यह एक instantiated समारोह एक गुंजाइश जब यह कहा जाता है है कि कहने के लिए शायद और अधिक सही है, और कहा कि हर कॉल एक अलग गुंजाइश पैदा करता है।)

3

यदि कोई नाम फ़ंक्शनएक्सप्रेस में शामिल किया गया है, तो वह नाम केवल पढ़ने-योग्य बाध्यकारी बन जाता है जो उसी नाम की बाहरी घोषणाओं को छाया करता है। लेकिन वह बाध्यकारी स्वयं औपचारिक पैरामीटर या फ़ंक्शन के भीतर स्थानीय घोषणा द्वारा छायांकित हो सकती है। फ़ंक्शन नाम के लिए इस तरह के बाध्यकारी को केवल फ़ंक्शनएक्सप्रेस के लिए बनाया गया है और अज्ञात फ़ंक्शनएक्सप्रेस या फ़ंक्शनक्लेक्शंस के लिए नहीं बनाया गया है। फ़ंक्शन डिक्लेरेशन के लिए बाध्यकारी नाम आसपास के वैरिएबल एंटरप्राइज़ में बनाया गया है।

एक समारोह वस्तु के साथ जुड़े एक से अधिक पर्यावरण रिकॉर्ड नहीं है:

यहां पर विस्तृत ES5.1 कल्पना संदर्भित explantion है। जब भी किसी फ़ंक्शन को एक नया घोषणा कहा जाता है, पर्यावरण प्रशिक्षण रिकॉर्ड उस विशेष फ़ंक्शन आमंत्रण की स्थानीय बाइंडिंग को शामिल करने के लिए बनाया जाता है।यह रिकॉर्ड वेरिएबल एंटरटेनमेंट और एक्जिक्यूशन कॉन्टेक्स्ट के प्रारंभिक लेक्सिकल एंटरटेनमेंट दोनों बन जाता है जो उस आमंत्रण के लिए बनाया गया है। यह धारा 10.4.3 में निर्दिष्ट है।

जब यह पर्यावरण रिकॉर्ड बनाया जाता है तो इसका "बाहरी पर्यावरण" फ़ंक्शन ऑब्जेक्ट की [[स्कोप]] आंतरिक संपत्ति के मूल्य पर सेट होता है जिसे कहा जा रहा है। (लाइन 5, 10.4.3) बाहरी पर्यावरण सभी गैर-स्थानीय घोषणाओं के लिए बाइंडिंग प्रदान करता है। [[स्कोप]] सेट किया जाता है जब एक फ़ंक्शन ऑब्जेक्ट बनाया जाता है (धारा 13 में अर्थशास्त्र देखें और 13.2)। इसलिए, किसी विशिष्ट फ़ंक्शन ऑब्जेक्ट के प्रत्येक विशिष्ट आमंत्रण में एक अलग स्थानीय वातावरण होता है लेकिन उस फ़ंक्शन के सभी आमंत्रण समान बाहरी [[स्कोप]] साझा करते हैं।

अधिकांश कार्यों के लिए, कब्जा [[स्कोप]] निष्पादन कॉन्टेक्स्ट का लेक्सिकल एंटरटेनमेंट है जो फ़ंक्शन बनने पर सक्रिय था। हालांकि फ़ंक्शन एक्स्प्रेशंस जिसमें पहचानकर्ता शामिल है क्योंकि फ़ंक्शन नाम के पास [[स्कोप]] श्रृंखला के शीर्ष पर एक अतिरिक्त घोषणात्मक पर्यावरण रिकॉर्ड शामिल है। (धारा 13 में तीसरे एल्गोरिदम के चरण 1-3 देखें)।

यह अतिरिक्त पर्यावरण रिकॉर्ड फ़ंक्शनएक्सप्रेस में दिए गए फ़ंक्शन नाम के लिए बाइंडिंग को कैप्चर करने के लिए उपयोग किया जाता है।