मुझे जावास्क्रिप्ट में प्रत्येक फ़ंक्शन के बाद अर्धविराम का उपयोग क्यों करना चाहिए?


282

मैंने विभिन्न डेवलपर्स को जावास्क्रिप्ट में फ़ंक्शन के बाद अर्धविराम शामिल किया है और कुछ नहीं। सबसे अच्छा अभ्यास कौन सा है?

function weLikeSemiColons(arg) {
   // bunch of code
};

या

function unnecessary(arg) {
  // bunch of code
}

जवाबों:


424

के बाद अर्धविराम समारोह घोषणाओं हैं आवश्यक नहीं

एक FunctionDeclarationका व्याकरण इस प्रकार निर्दिष्ट किया जाता है:

function Identifier ( FormalParameterListopt ) { FunctionBody }

कोई अर्धविराम व्याकरणिक रूप से आवश्यक नहीं है, लेकिन आश्चर्य हो सकता है कि क्यों?

अर्धविराम एक दूसरे से अलग बयानों की सेवा करते हैं , और FunctionDeclarationएक बयान नहीं है ।

FunctionDeclarationsमूल्यांकन में प्रवेश करने से पहले मूल्यांकन किया जाता है, उत्थापन एक सामान्य शब्द है जिसका उपयोग इस व्यवहार को समझाने के लिए किया जाता है।

शब्द "फंक्शन डिक्लेरेशन" और "फंक्शन स्टेटमेंट" का अक्सर गलत तरीके से इस्तेमाल किया जाता है, क्योंकि ECMAScript स्पेसिफिकेशन में कोई फंक्शन स्टेटमेंट नहीं बताया गया है, हालाँकि कुछ ऐसे इम्प्लीमेंटेशन हैं, जो अपने ग्रामर में एक फंक्शन स्टेटमेंट को शामिल करते हैं, -मोटीली मोज़िला- लेकिन फिर से अमानक है।

हालाँकि FunctionExpressions, जहाँ आप उपयोग करते हैं , अर्धविराम हमेशा अनुशंसित होते हैं :

var myFn = function () {
  //...
};

(function () {
  //...
})();

यदि आप उपरोक्त उदाहरण में पहले फ़ंक्शन के बाद अर्धविराम को छोड़ देते हैं, तो आपको पूरी तरह से अवांछित परिणाम मिलेंगे:

var myFn = function () {
  alert("Surprise!");
} // <-- No semicolon!

(function () {
  //...
})();

पहले फ़ंक्शन को तुरंत निष्पादित किया जाएगा, क्योंकि दूसरे के आसपास के कोष्ठक, Argumentsएक फ़ंक्शन कॉल के रूप में व्याख्या किए जाएंगे ।

अनुशंसित व्याख्यान:


2
स्पष्ट करने के लिए संपादित, यह आलेख फ़ंक्शन अभिव्यक्तियों के
सीएमएस

1
ECMA से पूरी तरह परिचित नहीं है, लेकिन यही वह मानक है जिसका मैं भी उपयोग करता हूं। अच्छी पोस्ट। मैं जितने भी टैटस देख रहा हूं उनमें से अधिकांश मैं और डीएल नमूने उस मानक का उपयोग करते हैं, इसलिए मैंने इसे अभी अनुकूलित किया है।
रेगेक्स

1
यहाँ कुछ भ्रम "अनुमति दी गई है क्योंकि इसे नजरअंदाज कर दिया जाएगा" के लिए एक अच्छा अंग्रेजी शब्द की कमी से प्रभावित हो सकता है। हम "वैकल्पिक" कहने पर पीछे हट जाते हैं, लेकिन यह भ्रामक है क्योंकि यह बताता है कि एक घोषणा के बाद अर्धविराम शामिल नहीं है, एक ही श्रेणी में एक बयान के बाद अर्धविराम शामिल नहीं है। उत्तरार्द्ध एक पूरी तरह से अलग अर्थों में वैकल्पिक है: ऐसा इसलिए है क्योंकि पार्सर आपके द्वारा छोड़े गए लापता अर्धविराम को जोड़ देगा , जबकि इस मामले में, यह इसलिए है क्योंकि पार्सर आपके द्वारा शामिल किए गए अर्धविराम की उपेक्षा करेगा । इसे दूसरे तरीके से रखने के लिए: यदि कोई वैकल्पिक है, तो आठ हैं
सेमीकॉलन

लिंक "नामांकित समारोह भाव demystified" एक मृत यूआरएल के लिंक अब, वेब संग्रह के यहाँ एक प्रति है: web.archive.org/web/20100426173335/http://yura.thinkweb2.com/...
टोनी

अंतिम उदाहरण एक महान है। इस मामले में एक अर्धविराम को स्वीकार करने से बहुत अजीब और कठिन-से-डिबग कीड़े हो जाते हैं। पूरा-पूरा मतदान।
यान यांकोव्स्की

38

मैं फ़ंक्शन-ए-वेरिएबल घोषणाओं के बाद उनका उपयोग करता हूं:

var f = function() { ... };

लेकिन शास्त्रीय शैली की परिभाषाओं के बाद नहीं:

function f() {
    ...
}

NetBeans, साथ ही अन्य IDE इस तरह के रूप में एक समारोह-चर के बाद अर्द्ध बृहदान्त्र देखना पसंद करते हैं। इस प्रकार।
लांस क्लीवलैंड

6
लेकिन - प्रश्नकर्ता के लिए - क्यों ?
ल्यूक

यह निर्माण चरण के दौरान मदद करता है। जब एक क्रॉलर लिपि एक अर्धविराम को देखता है, तो उसे आउटपुट फ़ाइल में लाइन ब्रेक जोड़ने की आवश्यकता नहीं होती है, यदि ऐसा नहीं होता है, तो एक लाइन ब्रेक उत्पन्न होगा और फ़ाइल थोड़ी बड़ी हो जाएगी।
ऑटोबॉक्सर

20

जेएस लिंट डे-फैक्टो कन्वेंशन है, और यह फ़ंक्शन बॉडी के बाद कोई अर्धविराम नहीं कहता है। "अर्धविराम" अनुभाग देखें ।


10
मैंने पहली बार एक समारोह देखा है जो अर्धविराम की कमी के कारण विफल रहा। मैं पूरी तरह से असहमत हूं कि इसे छोड़ना एक सम्मेलन है। हालांकि 99.99% समय नहीं टूटेगा, लेकिन कुछ ऐसी परिस्थितियाँ हैं जहाँ मैंने देखा है कि IE अर्धविराम के बिना जावास्क्रिप्ट को इंटर करने में असमर्थ रहा है।
मिल्सजॉर्स 18

8
मेरी प्रतिक्रिया केवल फ़ंक्शन परिभाषाओं से संबंधित है जैसे प्रश्न के दो उदाहरणों में। इन मामलों में, किसी भी स्थिति में किसी भी ब्राउज़र में समाप्ति अर्धविराम की आवश्यकता नहीं है। मुझे लगता है कि आप फ़ंक्शन अभिव्यक्तियों के बारे में सोच रहे होंगे। वे एक पूरी तरह से अलग मामला है, और मूल प्रश्न में संबोधित एक नहीं है।
डेविड हेदलुंड

var myFunction = फ़ंक्शन (arg) {कंसोल.लॉग (arg); } (फ़ंक्शन () {कंसोल.लॉग ('पूरी तरह से असंबंधित फ़ंक्शन'); वापसी 'देखें क्या होता है';} ());
मैकीज क्रॉसिक

@MillsJROSS मैं डेविड की प्रतिक्रिया का दूसरा जवाब देता हूं, और यदि आप अपनी असफलता का विस्तार करते हैं, तो आप खुश होंगे। यह वास्तव में एक समारोह अभिव्यक्ति या आईई की बग था?
wlnirvana

7

बस संगत रहो! उन्हें ज़रूरत नहीं है, लेकिन मैं व्यक्तिगत रूप से उनका उपयोग करता हूं क्योंकि अधिकांश खनन तकनीक अर्ध-बृहदान्त्र (उदाहरण के लिए, पैकर ) पर निर्भर करती हैं ।


5

वास्तव में सिर्फ आपकी पसंद पर निर्भर करता है। मुझे अर्ध कॉलनों के साथ कोड की लाइनें समाप्त करना पसंद है क्योंकि मैं जावा, सी ++, सी #, आदि के लिए उपयोग किया जाता हूं, इसलिए मैं जावास्क्रिप्ट में कोडिंग के लिए समान मानकों का उपयोग करता हूं।

मैं आमतौर पर अर्ध कॉलों में फ़ंक्शन घोषणाओं को समाप्त नहीं करता हूं, लेकिन यह सिर्फ मेरी प्राथमिकता है।

ब्राउज़र इसे किसी भी तरह से चलाएंगे, लेकिन हो सकता है कि किसी दिन वे इसे नियंत्रित करने वाले कुछ सख्त मानकों के साथ आएंगे।

कोड का उदाहरण मैं लिखूंगा:

function handleClickEvent(e)
{
     // comment
     var something = true;  // line of code
     if (something)  // code block
     {
        doSomething();  // function call
     }
}

1
लाइनें निश्चित रूप से अर्धविराम, थो के साथ समाप्त होनी चाहिए। अन्यथा एक खनिक पूरी तरह से कार्यक्षमता को तोड़ सकता है
डेविड

9
@ दाविद: उस मामले में मिनिफ़ायर टूट गया है, निश्चित रूप से?
असंतुष्टगीत

माना। यह C / C ++ बैकग्राउंड से आने वाले लोगों (मेरे जैसे) के लिए कोडिंग का एक स्वाभाविक तरीका है। यह कोड को अधिक पठनीय भी बनाता है।
अंशुमान मनराल

3

यह वास्तव में सम्मेलन या स्थिरता के मुद्दे से अधिक है।

मैं काफी निश्चित हूं हर बयान के बाद अर्धविराम नहीं देना आंतरिक पार्सर को धीमा कर देता है क्योंकि यह पता लगाना होता है कि कथन का अंत कहां है। मेरी इच्छा है कि आपके पास सकारात्मक पुष्टि करने के लिए आपके पास कुछ उपयोगी संख्याएं हों, लेकिन हो सकता है कि आप इसे स्वयं Google कर सकें। :)

इसके अलावा, जब आप कोड को संक्षिप्त या छोटा कर रहे होते हैं, तो अर्ध-कॉलनों की कमी से आपकी स्क्रिप्ट का एक छोटा संस्करण बन सकता है, जो आप नहीं चाहते थे क्योंकि सभी सफेद स्थान चले जाते हैं।


3
सवाल यह था कि अगर सेमीकोलोन को कार्यों के बाद होना था, तो हर बयान नहीं। मैं मानता हूं कि आपको हर बयान के बाद अर्धविराम लगाना चाहिए, और मैंने अन्य स्टैकओवरफ़्लो आम सहमति को भी यही कहते देखा है।
2

1
कार्य के बाद सहमत होने और अर्धविराम लगाने में विफल होने के परिणामस्वरूप उस न्यूनतम अंक में परिणाम होगा जिसका मैंने उल्लेख किया था। गुड लक सर।
मेसन

अपवोट के कारण, जिस पर अंकुश लगाने के मुद्दे को मजबूत किया गया, उसने मेरी समझ को स्पष्ट कर दिया
जैक 1332

1

जब मैंने अपनी लिपियों को छोटा किया तो मुझे महसूस हुआ कि मुझे ऐसे कार्यों के लिए अर्धविराम का उपयोग करने की आवश्यकता है जो समान चिह्न से शुरू होते हैं। यदि आप किसी फ़ंक्शन को var के रूप में परिभाषित करते हैं, तो हाँ आपको अर्धविराम का उपयोग करने की आवश्यकता है।

अर्धविराम की जरूरत है

var x = function(){};
var x = new function(){};
this.x = function(){};

अर्धविराम की जरूरत नहीं है

function x(){}

0

सरल:

अर्धविरामों को छोड़ना एक अच्छा अभ्यास है ;फ़ंक्शन ब्रेस के अंत के बाद । उन्हें वर्षों से एक सर्वोत्तम अभ्यास माना जाता है।

हमेशा उनका उपयोग करने का एक फायदा यह है कि यदि आप अपने जावास्क्रिप्ट को छोटा करना चाहते हैं।

जावास्क्रिप्ट को छोटा करते हुए, फ़ाइल के आकार को थोड़ा कम करने में मदद करता है।

लेकिन सबसे अच्छा अभ्यास और उपरोक्त उत्तर के लिए, फ़ंक्शन टैग के बाद इसका उपयोग करने की अनुशंसा नहीं की जाती है।

यदि आप अर्धविरामों का उपयोग नहीं करते हैं, और यदि आप छोटा करना चाहते हैं (जैसे कि बहुत सारे डेवलपर्स करना पसंद करते हैं यदि उनकी साइट बहुत अधिक जावास्क्रिप्ट परोसती है) तो आपको सभी प्रकार की त्रुटियां / चेतावनियाँ मिल सकती हैं।


0

किसी फ़ंक्शन के बाद अर्धविराम का उपयोग करना आवश्यक नहीं है या नहीं, आपके प्रोग्राम में त्रुटियों का कारण नहीं है। हालाँकि, यदि आप अपने कोड को छोटा करने की योजना बनाते हैं, तो फ़ंक्शन के बाद अर्धविराम का उपयोग करना एक अच्छा विचार है। उदाहरण के लिए आप नीचे दिए गए कोड की तरह हैं

//file one
var one=1;
var two=2;
function tryOne(){}
function trytwo(){}

तथा

//file two
var one=1;
var two=2;
function tryOne(){};
function trytwo(){};

जब आप दोनों को छोटा करते हैं, तो आपको आउटपुट के रूप में निम्नलिखित मिलेगा

ध्यान दें कि टिप्पणियाँ केवल ilustration के लिए हैं

//file one
var one=1;var two=2;function tryOne(){}
function trytwo(){}

तथा

//file two
var one=1;var two=2;function tryOne(){};function trytwo(){};
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.