ब्राउज़र/इम्प्लांटेशन विशिष्ट नहीं है, लेकिन ECMAScript Language Specification के Section 7.9 Automatic Semicolon Insertion
पढ़ने योग्य है।
7।9 स्वत: अर्द्धविराम निवेशन
कुछ ECMAScript बयान (खाली बयान, चर बयान, अभिव्यक्ति बयान करते-करते हुए बयान, बयान, ब्रेक बयान, वापसी कथन जारी है, और बयान फेंक) अर्धविराम से समाप्त किया जाना चाहिए। ऐसे सेमीकॉलन हमेशा स्रोत टेक्स्ट में स्पष्ट रूप से दिखाई दे सकते हैं। सुविधा के लिए, हालांकि, कुछ अर्धविरामों को स्रोत स्थितियों से कुछ स्थितियों में छोड़ा जा सकता है। ये स्थितियों का वर्णन करके वर्णित किया गया है कि अर्धविराम स्वचालित रूप से उन स्थितियों में स्रोत कोड टोकन स्ट्रीम में डाले जाते हैं।
7.9.1 स्वत: अर्द्धविराम प्रविष्टि के नियम अर्धविराम प्रविष्टि के तीन बुनियादी नियम नहीं हैं:
करते हैं, के रूप में कार्यक्रम बाएं से दाएं पार्स किया गया है, एक टोकन (हमलावर टोकन कहा जाता है) है
- offe: कि व्याकरण के किसी भी उत्पादन से अनुमति नहीं है सामना करना पड़ा, तो एक अर्धविराम स्वचालित रूप से हमलावर टोकन अगर एक या निम्न स्थितियों के और अधिक सच है से पहले डाला जाता है nding टोकन को कम से कम एक लाइन टर्मिनेटर द्वारा पिछले टोकन से अलग किया जाता है।
- अपमानजनक टोकन} है।
करते हैं, के रूप में कार्यक्रम बाएं से दाएं पार्स किया गया है, टोकन के इनपुट धारा के अंत का सामना करना पड़ा है और पार्सर एक एकल पूर्ण ECMAScript कार्यक्रम के रूप में इनपुट टोकन धारा पार्स करने में अक्षम है, तो इनपुट स्ट्रीम के अंत में एक अर्धविराम स्वचालित रूप से डाला जाता है।
करते हैं, के रूप में कार्यक्रम बाएं से दाएं पार्स किया गया है, एक टोकन का सामना करना पड़ा है कि व्याकरण के कुछ उत्पादन द्वारा अनुमति दी है, लेकिन उत्पादन एक प्रतिबंधित उत्पादन और टोकन एक के लिए पहली टोकन होगा एनोटेशन के तुरंत बाद टर्मिनल या nonterminal? [कोई लाइन टर्मिनेटर यहाँ]? प्रतिबंधित उत्पादन (और इसलिए इस तरह के टोकन को प्रतिबंधित टोकन कहा जाता है) के भीतर, और प्रतिबंधित टोकन कम से कम एक लाइन टर्मिनेटर द्वारा पिछले टोकन से अलग किया गया है, फिर एक अर्धविराम स्वचालित टोकन से पहले डाला गया है। हालांकि, पिछले नियमों पर एक अतिरिक्त ओवरराइडिंग स्थिति है: अर्धविराम को स्वचालित रूप से कभी नहीं डाला जाता है यदि अर्धविराम को खाली वक्तव्य के रूप में पार्स किया जाएगा या यदि वह सेमीकॉलन बन जाएगा, तो इसके लिए हेडर में दो अर्धविरामों में से एक बयान (12.6.3 देखें)। नोट निम्नलिखित व्याकरण में ही सीमित प्रस्तुतियों हैं: PostfixExpression: LeftHandSideExpression [यहाँ कोई LineTerminator] ++ LeftHandSideExpression [यहाँ कोई LineTerminator] - ContinueStatement: जारी रखने के लिए [यहाँ कोई LineTerminator] पहचानकर्ता; ब्रेकस्टेटमेंट: ब्रेक [कोई लाइन टर्मिनेटर यहाँ] पहचानकर्ता; रिटर्नस्टेटमेंट: वापसी [यहां कोई लाइन टर्मिनेटर नहीं] अभिव्यक्ति; थ्रोस्टेटमेंट: फेंक [कोई लाइन टर्मिनेटर यहाँ] अभिव्यक्ति; इन प्रतिबंधित प्रस्तुतियों का व्यावहारिक प्रभाव इस प्रकार है: जब एक ++ या - टोकन का सामना करना पड़ता है जहां पार्सर इसे पोस्टफिक्स ऑपरेटर के रूप में मानता है, और कम से कम एक लाइन टर्मिनेटर पिछले टोकन और ++ या - टोकन, फिर एक अर्धविराम स्वचालित रूप से +12 या - टोकन से पहले डाला जाता है। जब कोई जारी, ब्रेक, रिटर्न, या टोकन फेंक दिया जाता है और अगले टर्नकेन से पहले एक लाइन टर्मिनेटर का सामना करना पड़ता है, तो जारी रखने, ब्रेक करने, वापसी करने या टोकन फेंकने के बाद अर्धविराम स्वचालित रूप से डाला जाता है। ईसीएमएस्क्रिप्ट प्रोग्रामर के लिए परिणामी व्यावहारिक सलाह है: एक पोस्टफिक्स ++ या - ऑपरेटर अपने ऑपरेंड के समान लाइन पर दिखाई देना चाहिए। वापसी या फेंक कथन में एक अभिव्यक्ति वापसी या फेंक टोकन के समान लाइन पर शुरू होनी चाहिए। ब्रेक या जारी कथन में एक पहचानकर्ता ब्रेक या टोकन जारी रखने के समान लाइन पर होना चाहिए।
7.9.2 स्वत: अर्द्धविराम निवेशन
स्रोत
{ 1 2 } 3
के उदाहरण ECMAScript व्याकरण में एक वैध वाक्य, यहां तक कि स्वचालित अर्धविराम प्रविष्टि के नियमों के साथ नहीं है। इसके विपरीत, स्रोत
{ 1
2 } 3
में भी एक वैध ECMAScript वाक्य नहीं है, लेकिन निम्नलिखित में स्वत: अर्धविराम प्रविष्टि द्वारा तब्दील हो जाता है:
{ 1
;2 ;} 3;
जो एक वैध ECMAScript वाक्य है। स्रोत
for (a; b
)
एक वैध ECMAScript वाक्य नहीं है और क्योंकि अर्धविराम बयान के लिए एक के शीर्षक के लिए आवश्यक है स्वत: अर्धविराम प्रविष्टि से परिवर्तित नहीं होता। स्वत: अर्धविराम सम्मिलन किसी कथन के शीर्षलेख में दो अर्धविरामों को में से किसी एक को कभी भी सम्मिलित नहीं करता है। स्रोत
return
a + b
में स्वत: अर्धविराम प्रविष्टि द्वारा तब्दील हो जाता है निम्नलिखित:
return;
a + b;
नोट अभिव्यक्ति ए + बी, वापसी कथन द्वारा दिए जाते एक मूल्य के रूप में इलाज नहीं है, क्योंकि एक LineTerminator इसे टोकन रिटर्न से अलग करता है। स्रोत
a = b
++c
में स्वत: अर्धविराम प्रविष्टि द्वारा तब्दील हो जाता है निम्नलिखित:
a = b;
++c;
नोट टोकन ++, एक पोस्टफ़िक्स ऑपरेटर चर ख के लिए आवेदन के रूप में इलाज नहीं है, क्योंकि एक LineTerminator होता बी और ++ के बीच। स्रोत
if (a > b)
else c = d
एक वैध ECMAScript वाक्य नहीं है और फिर किसी और टोकन से पहले स्वत: अर्धविराम प्रविष्टि से परिवर्तित नहीं होता, भले ही व्याकरण की कोई उत्पादन, उस बिंदु पर लागू होता है क्योंकि एक स्वचालित रूप से डाले अर्धविराम हैं एक खाली बयान के रूप में पार्स किया जाना चाहिए। स्रोत
a = b + c
(d + e).print()
, स्वत: अर्धविराम प्रविष्टि से बदल नहीं है, क्योंकि parenthesised अभिव्यक्ति है कि दूसरी पंक्ति शुरू होता है एक समारोह कॉल के लिए एक तर्क सूची के रूप में व्याख्या की जा सकती:
a = b + c(d + e).print()
परिस्थिति में कि एक असाइनमेंट कथन बाएं कोष्ठक के साथ शुरू होना चाहिए, प्रोग्रामर के लिए स्वचालित अर्धविराम सम्मिलन पर भरोसा करने के बजाय पिछले कथन के अंत में एक स्पष्ट अर्धविराम प्रदान करने के लिए यह एक अच्छा विचार है।
संभवतः बेहतर डुप्लिकेट: [परिणाम घुंघराले ब्रेस प्लेसमेंट के आधार पर क्यों भिन्न होते हैं?] (Http://stackoverflow.com/q/3641519/1048572) – Bergi