6
if(true) { 
    let m = "yo"; 

    console.log(m); 
} 

console.log(m) 

आउटपुट:जावास्क्रिप्ट निष्पादन आदेश: कोड के बाद यह सशर्त निष्पादन क्यों करता है?

ReferenceError: m is not defined 
yo 

तो लाइन 4 पर कोड लाइन पर कोड 8.

let की मेरी उपयोग इस से कोई लेना देना है के बाद क्रियान्वित किया जा रहा है?

EDIT: टिप्पणियां पढ़ने के बाद मुझे एहसास हुआ कि यह मेरे रनटाइम के कारण हो सकता है। यहाँ हर रात को Firefox में मैं इसे कैसे देखते हैं:

firefox nightly let m

संपादित 2: यदि यह वास्तव में बस अपना क्रम है, तो कुछ इस तरह की वजह से उत्पादन कोड के लिए निहितार्थ हैं? ब्राउज़रों में असंगत व्यवहार? मैं इसके खिलाफ कैसे रक्षा करूं?

+0

आप इसे क्रोम में चला रहे हैं? – Ben

+1

[मैं इसे पुन: पेश नहीं कर सकता।] (Http://jsfiddle.net/nxzt5npp/) - और मैं इसे एफएफ देव संस्करण में देख रहा हूं। – Andy

+0

मुझे फ़ायरफ़ॉक्स नाइटली, कंसोल में यह व्यवहार मिलता है। –

उत्तर

2

तो मुझे लगता है कि एफएफ रनटाइम का व्यवहार ठीक है। एक कर्सर नज़र स्पेक (6.2.3.1 इत्यादि) इंगित करता है कि कोड को console.log(m) तक लाइन से लाइन चलाना चाहिए, जिस बिंदु पर ReferenceError फेंक दिया गया है।

मुझे संदेह है कि कंसोल पहले console.log को प्रस्तुत करने का विकल्प चुन रहा है और अपवाद संदेश (उदाहरण के लिए क्रोम के विपरीत है)।

क्या कंसोल को प्रतिपादन आदेश एक बग माना जाता है या नहीं, मैं दूसरों को छोड़ देता हूं।

अपवाद लॉग होने से पहले दिखाए गए अलर्ट के साथ मेरे विश्लेषण की पुष्टि करने के लिए निम्नलिखित प्रतीत होता है।

if(true) { 
    let m = "yo"; 

    alert(m); 
} 

console.log(m) 
+0

क्या आप पुष्टि कर सकते हैं कि यह एक बग है? मेरे पास यह कहने का ज्ञान नहीं है कि आप क्या कह रहे हैं [मुझे वास्तव में समझना मुश्किल लगता है :-)]। शायद मुझे एक रिपोर्ट दर्ज करनी चाहिए? –

+0

मुझे spec re संदर्भ त्रुटियों को जांचना होगा – Ben

+2

@adityamenon संदर्भ त्रुटि को फेंकना * प्रारंभिक * और 'if' और' console.log' को निष्पादित नहीं करना * सभी * एक बग होगा। कोड ठीक निष्पादित प्रतीत होता है, कि त्रुटि भ्रमित होने के बाद लॉग मुद्रित होती है लेकिन 'कंसोल' ऑब्जेक्ट के कार्यान्वयन द्वारा कवर किया जा सकता है। हां, आपको एक बग फाइल करना चाहिए क्योंकि यह व्यवहार काफी अप्रत्याशित है, लेकिन ES6 शिकायत के साथ नहीं बल्कि devtools घटक के साथ। (और ऐसा करने के बाद, कृपया इसे यहां लिंक करें) – Bergi

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