2015-03-08 6 views
5

मैं जावास्क्रिप्ट exceptions पर पढ़ रहा हूँ:जावास्क्रिप्ट नेस्ट कोशिश अपवाद

You can nest one or more try...catch statements. If an inner try...catch statement does not have a catch block, the enclosing try...catch statement's catch block is checked for a match.

मुझे लगता है कि मैं इसे सही ढंग से समझा और इस प्रकार इस परीक्षण कोड लिखा है:

try { 

    try { 
     throw "error"; 
    } 

} catch(e) { 

    console.log(e); 

} 

लेकिन यह त्रुटि आई:

Uncaught SyntaxError: Missing catch or finally after try

मुझे पता है कि यह स्पष्ट रूप से कहता है मुझे एक पकड़ या अंत में याद आ रही है लेकिन जावास्क्रिप्ट दस्तावेज कहता है कि मेरा कोड वैध होना चाहिए या क्या मैं गलतफहमी कर रहा हूं?

+0

आपको पता है कि एक 'try {तो परिदृश्य है कि बोली तो try/catch इसा युक्त एक try/finally (नहीं एक और try/catch) बात कर रहा है } '' अंत में 'के बिना' पकड़ 'के बिना ब्लॉक वास्तव में कुछ भी पूरा नहीं करेगा, भले ही इसे अनुमति दी गई हो, क्योंकि' try' ब्लॉक में कुछ डालने का एकमात्र कारण है, इसलिए आप अपवाद को संभाल सकते हैं। यह समझ में आता है कि यह एक त्रुटि है। – jfriend00

+0

हाँ, मुझे पता है। मैं बस इसका परीक्षण कर रहा था और सोचा था कि मैं दस्तावेज़ों को गलत समझ रहा था इसलिए मैंने स्पष्टीकरण के लिए एसओ से परामर्श किया, इस के लिंक ने एमडीएन गाइड से अधिक मदद की: http://www.ecma-international.org/ecma-262/5.1 /#sec-12.14 –

उत्तर

9

उद्धृत पाठ काफी भ्रामक है क्योंकि यह कहता है "यदि कोई आंतरिक प्रयास .. कैच में कैच ब्लॉक नहीं है" जो कोई समझ नहीं लेता है। यह सिर्फ "अगर एक आंतरिक try नहीं है ..." होना चाहिए।

जावास्क्रिप्ट में, आप अपने पास try नहीं रख सकते हैं; में है catch, finally, या दोनों के लिए।

try { 
    try { 
     throw "error"; 
    } 
    finally { 
    } 
} catch(e) { 
    console.log(e); 
} 
+0

स्पेक कहता है: "कोशिश करें ... पकड़ने के कथन में एक कोशिश ब्लॉक शामिल है, जिसमें एक या अधिक कथन शामिल हैं, और शून्य या अधिक पकड़ ब्लॉक", लेकिन यह शून्य पकड़ ब्लॉक के बारे में कुछ कहां कहता है = => एक 'अंत में' ब्लॉक की आवश्यकता है? – BaseZen

+0

@ बेसज़ेन: [§12.14] में (http://www.ecma-international.org/ecma-262/5.1/#sec-12.14), जहां यह 'try' कथन की वैध सूची दिखाता है, जो" कोशिश करें * * ब्लॉक * * कैच * "," कोशिश करें * * ब्लॉक * * अंत में * ", और" 'कोशिश करें * * ब्लॉक * * पकड़ें * * अंत में *" (बस "कोशिश करें * * ब्लॉक की अनुपस्थिति पर ध्यान दें * ")। –

+0

मुझे लगता है कि किसी को भ्रामक दस्तावेज/गाइड को ठीक करना चाहिए। –

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