प्रश्न का शोध करते समय मैंने JSLint से एक दिलचस्प परिणाम देखा। जेएसलिंट ने शिकायत की कि एक चर परिभाषित करने से पहले उपयोग किया गया था।कोशिश/पकड़ अभिव्यक्तियों में var कीवर्ड: JSLint बग या वैश्विक असाइनमेंट?
(function() {
try {
var a = 0;
throw { name: "fakeError" };
} catch (e) {
a = 1;
}
}());
जावास्क्रिप्ट का मेरे समझ का कहना है कि इसके बाद के संस्करण कोड के बराबर होना चाहिए::
(function() {
var a;
try {
a = 0;
throw { name: "fakeError" };
} catch (e) {
a = 1;
}
}());
और वास्तव में, न तो उदाहरण a
का कारण बनता है अस्तित्व के लिए यहाँ है कि एक ही परिणाम पैदा करता है कोड का एक छोटा संस्करण है फायरबग के माध्यम से चलाने पर वैश्विक दायरे में। मैंने ECMA-262 spec की धारा 12.14 पर एक नज़र डाली, लेकिन मुझे कुछ भी नहीं दिख रहा है जो मुझे लगता है कि कार्यों को अलग-अलग व्यवहार किया जाना चाहिए। क्या यह जेएसलिंट में बस एक बग है, या कुछ कार्यात्मक तरीके से दो अभिव्यक्ति अलग हैं?