मैं उन 3 नियमों को बहुत अच्छी तरह से समझ नहीं सका - उम्मीद है कि कुछ ऐसा है जो अधिक सादा अंग्रेजी है - लेकिन यहां मैं जावास्क्रिप्ट से इकट्ठा किया गया है: निश्चित गाइड, 6 वें संस्करण, डेविड फ्लैगन, ओ'रेली, 2011:
उद्धरण:
जावास्क्रिप्ट प्रत्येक लाइन ब्रेक को अर्धविराम के रूप में नहीं मानता है: यह आमतौर पर लाइन ब्रेक को अर्धविराम के रूप में मानता है केवल अगर यह अर्धविराम के बिना कोड को पार्स नहीं कर सकता है।
एक और उद्धरण: कोड के लिए
var a
a
=
3 console.log(a)
जावास्क्रिप्ट दूसरी लाइन ब्रेक को अर्धविराम के रूप में नहीं मानता है क्योंकि यह लंबे समय तक बयान को जारी रख सकता है a = 3;
तथा:
सामान्य नियम के दो अपवाद जो जावास्क्रिप्ट व्याख्या रेखा को अर्धविराम के रूप में तोड़ते हैं जब यह पहली पंक्ति पर बयान की निरंतरता के रूप में दूसरी पंक्ति को पार्स नहीं कर सकता है। पहले अपवाद में रिटर्न, ब्रेक और स्टेटमेंट जारी रखना शामिल है
... यदि इन शब्दों में से किसी के बाद एक लाइन ब्रेक दिखाई देता है ... जावास्क्रिप्ट हमेशा उस लाइन ब्रेक को अर्धविराम के रूप में व्याख्या करेगा।
... दूसरे अपवाद में ++ और ... ऑपरेटर शामिल हैं ... यदि आप पोस्ट ऑपरेटर्स के रूप में इन ऑपरेटरों में से किसी एक का उपयोग करना चाहते हैं, तो उन्हें उसी पंक्ति पर दिखाई देना चाहिए जिस अभिव्यक्ति पर वे लागू होते हैं। अन्यथा, लाइन ब्रेक को अर्धविराम के रूप में माना जाएगा, और ++ या - कोड के लिए लागू होने वाले उपसर्ग ऑपरेटर के रूप में पार्स किया जाएगा। इस कोड पर विचार करें, उदाहरण के लिए:
x
++
y
यह जैसा है x; ++y;
, वैसा नहीं हैx++; y
तो मुझे लगता है कि इसे सरल बनाने का मतलब है:
सामान्य तौर पर, जावास्क्रिप्ट तक यह समझ में आता है के रूप में कोड की निरंतरता के रूप में यह व्यवहार करेगा - 2 मामलों को छोड़कर: (1) कुछ कीवर्ड को बाद return
, break
, continue
, और (2) अगर यह देखता है ++
या --
एक नई लाइन पर है, तो यह जोड़ देगा ;
पिछले पंक्ति के अंत में।
"इसे तब तक कोड की निरंतरता के रूप में समझें जब तक यह समझ में आता है" यह नियमित अभिव्यक्ति के लालची मिलान की तरह महसूस करता है।
उपर्युक्त के साथ, इसका मतलब है कि return
एक लाइन ब्रेक के साथ, जावास्क्रिप्ट दुभाषिया एक सम्मिलित करेगा;
(फिर से उद्धृत: यदि इन शब्दों में से किसी के बाद एक लाइन ब्रेक दिखाई देता है [जैसे कि return
] ... जावास्क्रिप्ट हमेशा उस लाइन ब्रेक को अर्धविराम के रूप में व्याख्या करेगा)
और इस कारण से, का क्लासिक उदाहरण
return
{
foo: 1
}
अपेक्षित रूप से काम नहीं करेगा, क्योंकि जावास्क्रिप्ट दुभाषिया इसे इस प्रकार मानेंगे:
return; // returning nothing
{
foo: 1
}
इसके तुरंत बाद कोई लाइन-ब्रेक नहीं होना चाहिए return
:
return {
foo: 1
}
इसके लिए ठीक से काम करने के लिए। और ;
यदि आप ;
किसी कथन के बाद उपयोग करने के नियम का पालन करते हैं तो आप खुद को सम्मिलित कर सकते हैं :
return {
foo: 1
};