2011-12-16 29 views
21

निम्नलिखित जावास्क्रिप्ट कोड पर विचार करें।रिटर्न वैल्यू एक नई लाइन पर होने पर जावास्क्रिप्ट रिटर्न स्टेटमेंट क्यों काम नहीं करता है?

<script language="javascript" type="text/javascript"> 
     function correct() 
     { 
      return 15; 
     } 

     function wrong() 
     { 
      return 
        15; 
     } 

     alert("correct() called : "+correct()); 
     alert("wrong() called : "+wrong()); 

</script> 

ऊपर कोड स्निपेट में correct() विधि सही मान जो इस मामले में है देता है। wrong() विधि, हालांकि undefined देता है। ऐसी अन्य बातों के मामले में ऐसा नहीं है।



निम्नलिखित समारोह तथापि सही है और सही मान देता है।

function wrong() 
{ 
    return(
      15); 
} 

तो वाक्य रचना गलत है, यह कुछ संकलक त्रुटि जारी करना चाहिए, लेकिन ऐसा नहीं है। ऐसा क्यों होता है?

+4

संभावित डुप्लिकेट [जावास्क्रिप्ट के स्वचालित अर्धविराम सम्मिलन के नियम क्या हैं?] (Http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion) –

+1

यह उन कारणों में से एक है जिन्हें मैंने अपने रिटर्न मूल्यों के आसपास माता-पिता रखा है। – jfriend00

+0

परिणाम 15 है, शो के रूप में 10 नहीं। –

उत्तर

37

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

और return कथन के बाद एक नई पंक्ति जेएस इंटिप्टर को बताती है कि return के बाद अर्द्ध कोलन डाला जाना चाहिए। इसलिए आपका वास्तविक कोड यह है:

function wrong() 
{ 
    return; 
      15; 
} 

जो स्पष्ट रूप से गलत है। तो यह क्यों काम करता है?

function wrong() 
{ 
    return(
      15); 
} 

ठीक है हम एक खुले ( के साथ एक अभिव्यक्ति शुरू करते हैं। जेएस जानता है कि हम अभिव्यक्ति के बीच में हैं जब यह नई लाइन पाता है और इस मामले में किसी भी अर्ध कोलन को सम्मिलित करने के लिए पर्याप्त स्मार्ट नहीं है।

+2

नहीं, अर्ध-कॉलन आधिकारिक तौर पर वाक्यविन्यास का हिस्सा हैं और भाषा के वाक्य रचनात्मक प्रस्तुतियों में ध्यान दे रहे हैं जो सुझाव देंगे कि अर्ध-कॉलन वैकल्पिक हैं। यह सिर्फ इतना है कि यदि मानक छोड़ा जाता है तो मानक व्यवहार को परिभाषित करता है। तो, यह एक विशेष मामले की तरह है ... यह मानक के लिए एक ऐड-ऑन की तरह है। –

+1

वैकल्पिक रूप से, मेरा मतलब है कि स्क्रिप्ट उनके बिना दृष्टांत है। सी या जावा जैसी कई अन्य भाषाओं के विपरीत जो अर्ध कोलन अनुपस्थित होने पर संकलन/मूल्यांकन समय में त्रुटियों को फेंक देते हैं। मैं जावास्क्रिप्ट में अर्ध कोलन की कमी को प्रोत्साहित करने का मतलब नहीं था। यदि वास्तव में, बस विपरीत। –

+1

यह शब्द "आधिकारिक तौर पर" है जो मुझे परेशान करता है। प्रवेश सहन किया जाता है, लेकिन अर्ध-कॉलन * आधिकारिक तौर पर वाक्यविन्यास का हिस्सा हैं। –

1

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

4

अगर वहाँ है कि लाइन तो ; वहाँ डाला जाएगा जो किसी भी मूल्यों के बिना लौटने में परिणाम होगा पर return बयान के बाद कुछ भी नहीं है => वापसी मान undefined है।

देखें: http://lucumr.pocoo.org/2011/2/6/automatic-semicolon-insertion/

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