2011-11-13 12 views
7

मैं जानना चाहता हूं, क्या यह कानूनी है?जावास्क्रिप्ट कथन में अर्धविराम अनिवार्य हैं?

function test() 
{ 
    alert ("hello") 
    $("#loading").show(); 
} 

या मैं बजाय इस लिखना चाहिए:

function test() 
{ 
    alert ("hello"); 
    $("#loading").show(); 
} 

अर्धविराम जावास्क्रिप्ट में वैकल्पिक हैं? क्योंकि मैंने इसे एक मंच में देखा:

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

+1

देखें: http://stackoverflow.com/questions/7219541/what-is-the-difference-between-semicolons-in-javascript-and-in-python/7219549#7219549 और करने के लिए अन्य उत्तर प्रश्न – NullUserException

+1

आपके दो बयान दोनों अर्धविराम हैं - न तो अलग हैं। – Nightfirecat

+0

@ नाइटफायरकैट - वे मूल रूप से नहीं थे, ऐसा लगता है कि NullUserException के संपादन में सेमी-कोलन को वापस रखा गया है। संपादित करें: लेकिन फिर इसे फिर से हटा दें! –

उत्तर

12

अर्धविराम हमेशा अनिवार्य नहीं होते हैं, लेकिन मैं हमेशा उनका उपयोग करने की अनुशंसा करता हूं। स्वत: अर्धविराम प्रविष्टि पर नियमों के लिए ECMAScript spec देखें:

कुछ ECMAScript बयान (खाली बयान, चर बयान, अभिव्यक्ति बयान करते-करते हुए बयान, बयान जारी रखने के बयान, वापसी कथन को तोड़ने, और बयान फेंक) सेमीकॉलन के साथ समाप्त होना चाहिए। ऐसे सेमीकॉलन हमेशा स्रोत टेक्स्ट में स्पष्ट रूप से दिखाई दे सकते हैं। सुविधा के लिए, हालांकि, ऐसे अर्धविरामों को कुछ स्थितियों में स्रोत टेक्स्ट से छोड़ा जा सकता है। ये स्थितियां कह रही हैं कि अर्धविराम स्वचालित रूप से में उन स्थितियों में स्रोत कोड टोकन स्ट्रीम में डाले जाते हैं।

अद्यतन (आगे समझाने की)

शायद सबसे आम दिखाने के लिए क्यों स्वचालित अर्धविराम प्रविष्टि बुरा हो सकता है इस्तेमाल किया स्थिति यह है कि एक और जवाब में @sissonb द्वारा पर छुआ है। पर विचार करें निम्नलिखित:

function something(a, b) { 
    return 
    a + b; 
} 

क्या आप उम्मीद कर किया जा सकता है नई लाइन के लिए है पर ध्यान नहीं दिया जाना चाहिए, और कोड के रूप में व्याख्या:

function something(a, b) { 
    return a + b; 
} 

दुर्भाग्य से, स्वत: अर्धविराम प्रविष्टि खेलने में आता है, और कोड वास्तव में इस तरह व्याख्या की है:

function something(a, b) { 
    return; 
    a + b; 
} 

और एक खाली return बयान फ़ंक्शन undefined का मतलब है। तो दो तर्कों की एक अच्छी राशि के बजाय, आपको undefined मिलते हैं और संभावित रूप से बहुत भ्रमित हो जाते हैं कि आप कहां गलत हो गए हैं! यही कारण है कि मैं आपके प्रश्न में पूरी तरह से बयान से सहमत हूं कि स्वत: अर्धविराम सम्मिलन एक भयानक दुरूपयोग है।

+0

एक समझदार अपवाद एक-लाइनर कॉलबैक होगा: 'ar.sort (फ़ंक्शन (ए, बी) {वापसी एफ (ए) - एफ (बी)})' –

0

अर्धविराम अनिवार्य नहीं कर रहे हैं। यदि वे गायब हैं तो वे स्वचालित रूप से लाइन के अंत में जोड़े जाते हैं जो वास्तव में इस कोड को अपरिभाषित करने का कारण बनता है।

return 
{ 
    text:"hello" 
} 
+1

यह वास्तव में 'अपरिभाषित' लौटाता है, जो 'शून्य' – NullUserException

+0

@NullUserException ఠ_ఠ जैसा ही मेरा उत्तर अपडेट किया गया है। धन्यवाद – sissonb

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