2012-06-28 10 views
10

मुझे याद नहीं है, लेकिन हाल ही में मैंने एक टिप्पणी पारित की है जहां उपयोगकर्ता ने बताया था कि 1TBS जावास्क्रिप्ट में ऑलमैन से अधिक पसंदीदा है और कहा कि एलमैन जावास्क्रिप्ट में खतरनाक प्रभाव डालता है।जावास्क्रिप्ट में ऑलमैन शैली के खतरनाक प्रभाव

क्या यह एक वैध कथन था? यदि हां, तो क्यों?

+1

एएसआई द्वारा प्रभावित अधिक बयान हैं, spec की जांच करें। लिंक @Esailija ने पोस्ट किया है या [इस उत्तर] को देखने के लिए (http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion/2846298#2846298), मैंने वहां एएसआई नियमों का संक्षेप में बताया ... आह, और बस मस्ती के लिए, * निम्नलिखित परीक्षण पास करने के लिए प्रयास करें: [एएसआई टेस्ट] (http://asi.qfox.nl/) – CMS

+0

यह भी देखें [क्या ब्लॉक शैली वास्तव में है महत्वपूर्ण?] (http://stackoverflow.com/q/3004496/1048572) – Bergi

उत्तर

19

return यह इतना के बाद LineTerminator हो सकता है नहीं:

return 
{ 


}; 

return; के रूप में व्यवहार किया जाता है (वापसी undefined) के बजाय return {}; (एक ऑब्जेक्ट)

अधिक के लिए Automatic Semicolon Insertion (ASI) के लिए नियम देखें।

+0

शायद कह रहा है कि यह एएसआई से संबंधित है उत्तर के लिए एक प्लस है? –

+4

मुझे वास्तव में जावास्क्रिप्ट पसंद आया है, लेकिन यह अभी भी वास्तव में अजीब है – NimChimpsky

+0

@ फ्लोरियन मार्गिन मुझे एक पल दें – Esailija

2

मुझे लगता है कि यह कथन पर निर्भर करता है। उदाहरण के लिए यदि ब्रेस खोलना नई लाइन पर है तो एक रिटर्न स्टेटमेंट टूटा जा सकता है। More info here

2
return { 
    a: "A", 
    b: "B" 
}; 

// vs. 

return // Semicolon automatically inserted here! Uh oh! 
{ 
    a: "A", 
    b: "B" 
} 
+0

इसे प्राप्त करें। धन्यवाद!!! –

3

यह एक वैध कथन है।

क्योंकि जावास्क्रिप्ट के इंजनों में एएसआई (स्वचालित अर्धविराम सम्मिलन) कहा जाता है जो लाइन रिटर्न पर आवश्यक होने पर अर्धविराम डालता है। "यदि आवश्यक हो" संदिग्ध है; कभी-कभी यह काम करता है और कभी-कभी नहीं करता है। the rules देखें।

तो, के रूप में अन्य उत्तर में कहा:

return 
{ 
}; 

// Is read by the JavaScript engine, after ASI, as: 
return; // returns undefined 
{ // so this is not even executed 
}; 

तो यह return बयान के लिए अनुशंसित नहीं है।

हालांकि, यदि आपके दिशानिर्देश फ़ंक्शन घोषणाओं के लिए ऑलमैन शैली की अनुशंसा करते हैं, तो यह बिल्कुल ठीक है। मुझे कुछ पता है जो करते हैं।

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