अर्धविराम आवश्यक नहीं हैं।
एक FunctionDeclaration
के व्याकरण इस रूप में the specification में वर्णित है:
function Identifier (FormalParameterListopt) { FunctionBody }
कोई अर्धविराम व्याकरण की दृष्टि से आवश्यक है, लेकिन क्यों आश्चर्य हो सकता है?
अर्धविराम एक दूसरे से बयान अलग की सेवा, और एक FunctionDeclaration
एक बयान नहीं है।
FunctionDeclarations
से पहले कोड निष्पादन में प्रवेश करता है मूल्यांकन किया जाता है, hoisting एक आम शब्द इस व्यवहार की व्याख्या करने के लिए प्रयोग किया जाता है।
"फ़ंक्शन घोषणा" और "फ़ंक्शन स्टेटमेंट" शब्द अक्सर गलत तरीके से उपयोग किए जाते हैं, क्योंकि ईसीएमएस्क्रिप्ट विशिष्टता में वर्णित कोई फ़ंक्शन स्टेटमेंट नहीं है, हालांकि कुछ कार्यान्वयन हैं जिनमें उनके व्याकरण में फ़ंक्शन स्टेटमेंट शामिल है, -निटे तौर पर मोज़िला - लेकिन फिर यह गैर मानक है।
हालांकि अर्धविराम हमेशा सलाह दी जाती है जहां FunctionExpressions
उपयोग करते हैं, उदाहरण के लिए:
var myFn = function() {
//...
};
(function() {
//...
})();
पूरी तरह से अवांछित परिणाम आप ऊपर के उदाहरण में पहले समारोह के बाद अर्धविराम छोड़ देते हैं, तो आप मिल जाएगा:
var myFn = function() {
alert("Surprise!");
} // <-- No semicolon!
(function() {
//...
})();
पहला फ़ंक्शन तुरंत निष्पादित किया जाएगा, क्योंकि दूसरे के आस-पास के कोष्ठक को फ़ंक्शन कॉल के Arguments
के रूप में व्याख्या किया जाएगा।
अनुशंसित व्याख्यान:
स्पष्ट करने के लिए संपादित, यह आलेख ** फ़ंक्शन एक्सप्रेशन ** – CMS
ईसीएमए से पूरी तरह से परिचित नहीं है, लेकिन यह मानक भी मैं उपयोग करता हूं। अच्छी पोस्ट अधिकांश टट्स जिन्हें मैं ऑनलाइन देखता हूं और कोड नमूने मैं डीएल उस मानक का उपयोग करता हूं, इसलिए मैंने इसे अनुकूलित किया है। – regex
यहां कुछ भ्रम "अनुमति के लिए एक अच्छा अंग्रेजी शब्द की कमी से प्रभावित हो सकता है क्योंकि इसे अनदेखा कर दिया जाएगा"। हम "वैकल्पिक" कहने पर वापस आते हैं, लेकिन यह भ्रामक है क्योंकि यह सुझाव देता है कि एक घोषणा के बाद अर्धविराम शामिल नहीं है जिसमें एक बयान के बाद अर्धविराम शामिल नहीं है। उत्तरार्द्ध एक पूरी तरह से अलग अर्थ में वैकल्पिक है: ऐसा इसलिए है क्योंकि पार्सर * आपके द्वारा छोड़े गए लापता अर्धविराम को जोड़ देगा *, जबकि इस मामले में, ऐसा इसलिए है क्योंकि पार्सर * आपके द्वारा शामिल अर्धविराम * को अनदेखा कर देगा। इसे एक और तरीका रखने के लिए: यदि कोई वैकल्पिक है, तो * आठ * हैं। – Semicolon