निम्नलिखित अंश from ECMA-262 v5.1 (जो मैंने हाल ही में this question में देखा था) पर विचार करें:कैच क्लॉज का अपना लेक्सिकल वातावरण क्यों होता है?
एक शाब्दिक पर्यावरण एक विनिर्देश विशिष्ट चरों और कार्यों ECMAScript कोड का शाब्दिक नेस्टिंग संरचना पर आधारित करने के लिए पहचानकर्ता के सहयोग से परिभाषित किया जाता प्रकार है । एक व्याख्यात्मक पर्यावरण में पर्यावरण रिकॉर्ड और बाहरी लेक्सिकल पर्यावरण के संभावित रूप से शून्य संदर्भ शामिल हैं। आम तौर पर एक लेक्सिकल एनवायरनमेंट ईसीएमएस्क्रिप्ट कोड की कुछ विशिष्ट सिंटैक्टिक संरचना से जुड़ा होता है जैसे फंक्शनडेक्लेरेशन, एक विस्टामेंटमेंट, या ट्रास्टेटमेंट का कैच क्लॉज और हर बार ऐसे कोड का मूल्यांकन किया जाता है, जब एक नया लेक्सिकल एनवायरनमेंट बनाया जाता है।
मैंने सोचा था कि, मतलब catch
खंड के शरीर की अपनी चर फहराने हैं कार्यों करते हैं लेकिन जाहिरा तौर पर that's not the case:
var a = 1;
try {
console.log(x); // ReferenceError
} catch(ex) {
console.log(a); // 1, not undefined
var a = 3;
}
किसी को भी पता है क्यों? इसके अलावा, catch
खंड को अपने स्वयं के शब्दावली पर्यावरण की आवश्यकता क्यों है?
रहे हैं "एक बाहरी शाब्दिक पर्यावरण के लिए संभवतः अशक्त संदर्भ।" इसका मतलब यह भी शून्य नहीं हो सकता है, और जब शून्य नहीं होता है, तो यह वैश्विक चर को ठीक लगेगा। –
@ माइक'पोमैक्स 'कमरमैन मैं वास्तव में उम्मीद कर रहा था कि' पकड़ 'में अपने स्थानीय चर हो सकते हैं, जो ग्लोबल्स को छाया दे रहे हैं। लेकिन ऐसा नहीं हो सकता है, क्योंकि इसके लिए बनाए गए लेक्सिकल एनवायरनमेंट एक और प्रकार का है (बर्गी का जवाब देखें, और [10.3] पर spec (http://www.ecma-international.org/ecma-262/5.1/#sec -10.3))। – bfavaretto