रिटर्न और रिटर्न () के बीच अंतर क्या है?


97
function a() { return 1; }
function b() { return(1); }

मैंने क्रोम के कंसोल में उपरोक्त कोड का परीक्षण किया, और दोनों वापस आ गए 1

function c() { return "1"; }
function d() { return("1"); }

मैंने ऊपर दिए गए कोड का भी परीक्षण किया, और दोनों फ़ंक्शन वापस आ गए "1"

तो उपयोग करने के बीच अंतर क्या है returnऔर return()?


21
यहाँ उत्तर भी लागू होंगे void(x),typeof(x)
पॉल एस।

3
@ पॉलस-हमेशा से हैरान था void(0)क्योंकि यह अपरिभाषित के लिए आशुलिपि माना जाता है । तो अगर यह आशुलिपि है, तो अनावश्यक वर्ण क्यों शामिल हैं? ;-)
रोबग्ल

1
@RobG मुझे लगता है कि यह एक कैरी-भर से है अजगर और वास्तव में विशेष मामलों जहां ऑपरेटरों शामिल करना चाहते हैं के लिए उपयोगी हो सकता है void i = 1; // ReferenceErrorबनामvoid (i = 1); // undefined
पॉल एस

1
आप इस प्रश्न से चकित हो सकते हैं, जो कि आपका प्रश्न C # पर लागू है: stackoverflow.com/questions/2186595/…
एरिक लिपर्ट

जवाबों:


177

के बीच भी ऐसा ही है

var i = 1 + 1;

तथा

var i = (1 + 1);

यह कुछ भी नहीं है। कोष्ठकों को अनुमति दी जाती है क्योंकि उन्हें मूल्यांकन आदेश को प्रभावित करने के लिए किसी भी अभिव्यक्ति की अनुमति दी जाती है, लेकिन आपके उदाहरणों में वे केवल सतही हैं।

returnएक समारोह नहीं है, लेकिन एक बयान है । यह वाक्यात्मक रूप से अन्य सरल नियंत्रण प्रवाह विवरणों के समान है breakऔर continueजो कि कोष्ठक का भी उपयोग नहीं करते हैं।


12
एक वापसी बयान एक अभिव्यक्ति द्वारा पीछा किया जा सकता है। किसी फ़ंक्शन में रिटर्न होना चाहिए, इसलिए फ़ंक्शन एक्सप्रेशन का मान लौटाता है, या यदि कोई अपरिभाषित नहीं है
रॉब

37
@ chris97ong: रिटर्न एक फ़ंक्शन नहीं है।
रेमकोगर्लिच

34
यदि आप returnएक फंक्शन में बने हैं , तो आप उससे मूल्य कैसे लौटाएंगे?
dan04

4
यह एक महान उदाहरण के साथ एक महान जवाब है, लेकिन मुझे लगता है कि यह जोड़ने के लायक हो सकता है कि 'वापसी' मुख्य जवाब में एक समारोह नहीं है - यह देखते हुए कि यह गलतफहमी की जड़ है जो इस सवाल का कारण बना।
बिस्किटबकर

3
@ बिस्किटबकर: मैंने थोड़ा जोड़ा। जब मैंने इस छोटे से उत्तर को लिख दिया तो मुझे उम्मीद नहीं थी कि मुझे 50+
अपवॉट्स मिलेंगे

21

इसमें कोई फर्क नही है।

returnएक फ़ंक्शन कॉल नहीं है, लेकिन एक भाषा कथन है। आप कोष्ठक के साथ क्या कर रहे हैं बस अपने रिटर्न मान को समूहीकृत कर रहे हैं ताकि इसका मूल्यांकन किया जा सके। उदाहरण के लिए, आप लिख सकते हैं:

return (x == 0);

इस स्थिति में, आप स्टेटमेंट का मूल्य लौटाते हैं x == 0, जो एक बूलियन लौटाएगा trueया falseके मूल्य पर निर्भर करेगा x


6
रिटर्न एक ऐसा कीवर्ड है जो रिटर्न स्टेटमेंट की शुरुआत को दर्शाता है।
रॉब

1
रिटर्न स्टेटमेंट के मूल्यांकन के लिए "ग्रुपिंग" की आवश्यकता नहीं है। तो किसी भी मामले में एक बूलियन रिटर्न होगा।
वुल्फ

18

वास्तव में यहाँ की पूर्वता ()अधिक है, इसलिए यह पहले मूल्यांकन करता है:

यहाँ सबसे पहले ("1")निम्न तरीके से मूल्यांकन किया जाता है:

("1")                     ==> "1"
("1","2")                 ==> "2"
("1","2","3")             ==> "3"
("1"+"2","2"+"2","3"+"2") ==> "32"
(2+3+6)                   ==>  11

इसके बाद के संस्करण के बराबर है:

return "1";

नेत्रहीन देखें:

viusal

इसलिए मूल रूप से कार्यक्षमता में कोई अंतर नहीं है, लेकिन दूसरा एक लापरवाही से थोड़ा धीमा हो सकता है क्योंकि यह सबसे पहले कोष्ठक को हल करता है।


2
जब आप ऐसा नहीं करते हैं तो आप पूरी तरह से असत्यापित दावे करेंगे कि "दूसरा लापरवाही से थोड़ा धीमा हो सकता है"?

9

बिल्कुल कोई अंतर नहीं है। यदि आप जेएस (ईसीएमएस्क्रिप्ट) रिटर्न स्टेटमेंट के विवरण को देखेंगे । कई अन्य बातों के अलावा, यह आपको बता रहा है:

वापसी [कोई LineTerminator यहाँ] अभिव्यक्ति;

कि आप अभिव्यक्ति प्रदान कर सकते हैं return। अभिव्यक्ति है hello, Math.abs(x), yourCustomFunc(7), या अपने दूसरे मामले में यह हो सकता है 1या (1)1मूल्यांकन के बाद अभिव्यक्ति के रूप में ही है(1) और के रूप में एक ही है (((((1))))))या के रूप में भी कुछ वास्तव में विचित्र की तरह है (+(!(+(!1))))


1
आधिकारिक संदर्भ के लिए +1। क्या पृष्ठ-दर-पृष्ठ संदर्भ नहीं है? - एक पेज का HTML बहुत लंबा लोड करता है।
वुल्फ

@ भेड़िया मुझे ऐसा नहीं मिला। यहाँ एक और एक है, लेकिन यह भी एक पृष्ठ लोग हैं. mozilla.org/~jorendorff/…
साल्वाडोर डाली

हाँ, दु: खी। मुझे भी कोई सफलता नहीं मिली। रिटर्न स्टेटमेंट के पूरे सिंटैक्स में अपनी बोली के विस्तार के बारे में क्या?
वुल्फ

9

कोई अंतर नहीं है, कोष्ठक वैकल्पिक हैं। MSDN देखें :

return[(][expression][)];

वैकल्पिक अभिव्यक्ति तर्क फ़ंक्शन से लौटाए जाने वाला मान है। यदि छोड़ दिया जाता है, तो फ़ंक्शन मान वापस नहीं करता है।

आप किसी फ़ंक्शन के निष्पादन को रोकने और अभिव्यक्ति के मूल्य को वापस करने के लिए रिटर्न स्टेटमेंट का उपयोग करते हैं। यदि अभिव्यक्ति को छोड़ दिया जाता है, या फ़ंक्शन के भीतर से कोई रिटर्न स्टेटमेंट निष्पादित नहीं किया जाता है, तो वर्तमान फ़ंक्शन को अभिव्यक्त करने वाले एक्सप्रेशन को अपरिष्कृत मान दिया जाता है।


8
केवल एमएस एक रिटर्न स्टेटमेंट में ग्रुपिंग को "वैकल्पिक" बनाने के लिए सोचेंगे । वे किसी भी अभिव्यक्ति या व्याकरण के कई अन्य भागों की तरह "वैकल्पिक" हैं।
रॉब

@ रोब: लेकिन जाहिर है, वे एक returnबयान में पूछे जाने की अधिक संभावना रखते हैं । : पी। एस। एस। ने शायद जेएस नॉब्स के सवाल का क्षेत्ररक्षण किया।
cHao

2
एम $ स्पष्टीकरण गलत है। The (), रिटर्न स्टेटमेंट का हिस्सा नहीं है।
सलमान A

4
"पाठक के लिए एक अंतर है।" ठीक है, हाँ: MSDN कल्पना गलत तरीके से निकलती है return (expressionऔर return expression)कानूनी है।
जिम बाल्टर

2
@JimBalter साथ में return (), return (और return ): P
पॉल

9

returnहै एक बयान कोई कीवर्ड वापसी कथन शुरू होता है , नहीं एक समारोह।

जैसा कि उल्लेख किया गया है, अतिरिक्त कोष्ठक मूल्यांकन क्रम को प्रभावित करते हैं, लेकिन नामांकित फ़ंक्शन को "निष्पादित" करने के लिए उपयोग नहीं किया जाता है return। यही कारण है कि ये लाइनें बिना किसी समस्या के काम करती हैं:

return (1);
var a = (1);

वे इन पंक्तियों के समान प्रभाव में हैं:

return 1;
var a = 1;

कारण return()सिंटैक्स त्रुटि फेंकता है सटीक कारण के लिए निम्न लाइन एक त्रुटि फेंकता है (तुलना के लिए रिटर्न स्टेटमेंट शामिल है):

return();    // SyntaxError: syntax error
var a = ();  // SyntaxError: syntax error

और बस एक साइड नोट के रूप में, यदि returnइसके बाद कुछ भी शामिल नहीं है , तो यह मानता है कि आप वापस लौटना चाहते थे undefined
IQAndreas

@Wolf अभिव्यक्ति वैकल्पिक है, इसलिए returnअपने आप में एक वापसी कथन है।
पॉल

6

मनुष्यों के लिए बहुत बड़ा अंतर है, और जावास्क्रिप्ट इंजन के लिए शून्य अंतर है।

return 1एक बयान है कि हमें तुरंत 1 के फल देने वाले मूल्य से बाहर निकलने की आवश्यकता है।

return(1)यह वही कथन है जो फिजियोथैरेपी कन्वेंशन द्वारा फंक्शन कॉल के रूप में प्रच्छन्न है जिसे आप जावास्क्रिप्ट में कोष्ठक के बाहर स्थान सम्मिलित करने के लिए बाध्य नहीं हैं। यदि आप उत्पादन प्रणाली में इस तरह कोड का उपयोग करते हैं, तो कोई भी अनुरक्षक आपके कार्यालय में हिस्सेदारी और मशालों के साथ आएगा, कुछ समय बिताने के बाद यह तय करने की कोशिश करेगा कि क्या आपके पास वास्तव return()में कोडबेस में कहीं काम है या बस पता नहीं क्या हैreturn कीवर्ड है।

जैसा कि कई अन्य लोगों ने पहले ही सही ढंग से कहा है, संख्या के लिए शाब्दिक "प्राथमिक" के अलावा कोष्ठक कुछ भी नहीं करते हैं 1


3
"मनुष्यों के लिए बहुत बड़ा अंतर है" - सक्षम नहीं हैं। "फ़ंक्शन कॉल के रूप में एक ही विवरण प्रच्छन्न है" - कोई returnफ़ंक्शन नहीं है। "आइडियल कॉन्वेंट जिसे आप जावास्क्रिप्ट में कोष्ठकों के बाहर स्थान सम्मिलित करने के लिए बाध्य नहीं हैं" - लगभग किसी भी भाषा को इसकी आवश्यकता नहीं है; इस मुहावरे को बुलावा मुहावरा है। "कोई भी अनुचर आपके कार्यालय में हिस्सेदारी और मशालों के साथ आएगा" - कोई सक्षम नहीं होगा। return(1)खराब प्रथा है लेकिन जो लोग इस तरह की चीजों से परेशान हैं वे संसाधनों को बर्बाद कर रहे हैं और एक बुरा माहौल बना रहे हैं।
जिम बाल्टर

@JimBalter "सक्षम वाले नहीं" - हा! "लगभग किसी भी भाषा की आवश्यकता नहीं है" - यही कारण है कि मैंने कहा "सम्मेलन"। अगर यह मुहावरेदार है, तो इसे "मुहावरा" कहा जाता है। "कोई returnकार्य नहीं है" - तथ्य यह है कि दुभाषिया आपको नाम के साथ एक फ़ंक्शन को पंजीकृत करने से मना returnकरेगा कोड के पाठक को पहले उसकी पवित्रता पर सवाल नहीं करने में मदद मिलेगी, इसलिए, यह कोड बेकार है। return(1)सिर्फ "खराब प्रैक्टिस" नहीं है, किसी का खतरनाक संकेत है कि वह यह नहीं जानता कि वह क्या कर रहा है!
१४:१४ बजे १४:१४

2
तो आप या तो नहीं जानते कि "बाध्य" का क्या मतलब है, या आप अपना दावा बदल रहे हैं ... किसी भी तरह से मैं अपना ज्यादा समय आपके ऊपर बर्बाद नहीं करूंगा।
जिम बेल्टर

मुझे संदेह है कि आपके अंतिम वाक्य की ट्रथ; returnहै (सभी भाषाओं में मुझे पता है कि यह कीवर्ड है) कम से कम पूर्वता। इसलिए, यदि वैकल्पिक अभिव्यक्ति मौजूद है, तो यह हमेशा पहले मूल्यांकन किया जाता है।
वुल्फ

4

रिटर्न स्टेटमेंट में, अभिव्यक्ति के चारों ओर कोष्ठक पहले से निर्मित हैं।

जावास्क्रिप्ट में, कई अन्य भाषाओं (जैसे सी, सी ++, जावा, पायथन) में, वापसी विवरण के दो भाग हैं: कीवर्ड returnऔर (वैकल्पिक) अभिव्यक्ति। इसलिए, किसी भी स्थिति में, कीवर्ड का अनुसरण करने वाले सभी का मूल्यांकन पहली बार अभिव्यक्ति के रूप में किया जाता हैreturn , उसके बाद, कॉलबर्नर पर नियंत्रण वापस पास करके रिटर्न स्टेटमेंट "निष्पादित" किया जाता है।

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

बाद में परिशिष्ट

यदि कोष्ठक के साथ या इसके बिना, returnएक ही पंक्ति में, अर्थात् , के पीछे वैकल्पिक अभिव्यक्ति को रखने के लिए मत भूलना । असली ख़तरा साथ returnयह बाद एक लाइन ब्रेक जोड़ने में जावास्क्रिप्ट झूठ में:

function test() {
  return 
  1;
}

... क्योंकि उपरोक्त testफ़ंक्शन वापस आ जाएगा undefined


1

कोष्ठक जोड़कर, हमने यह सुनिश्चित किया है कि जावास्क्रिप्ट, वापसी के बाद लिखे गए कई कथनों से पहले अर्धविराम नहीं डालता, संदर्भ के लिए: - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar #Automatic_semicolon_insertion

उदाहरण :

return a + b;

में तब्दील हो गया है

return; a + b;

द्वारा ए.एस.आई.

कंसोल "रिटर्न स्टेटमेंट के बाद अगम्य कोड" को चेतावनी देगा। इस समस्या से बचने के लिए (एएसआई को रोकने के लिए), आप कोष्ठक का उपयोग कर सकते हैं:

return ( a + b );
से कॉपी किया गया कोड: - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/return


यह बिल्कुल सही है और इस तरह यह जटिल अभिव्यक्तियों के लिए समझ में आता है। लेकिन आपको पहले वाक्य में एक ही पंक्ति या सीधे पीछे से जोड़ना चाहिए ताकि इसे और भी स्पष्ट किया जा सके। मुझे लगता है कि गिरावट इस की गलत व्याख्या से आई है।
वुल्फ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.