return과 return ()의 차이점은 무엇입니까?


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

Chrome 콘솔에서 위 코드를 테스트 한 결과 둘 다 1.

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

또한 위의 코드를 테스트했으며 두 함수 모두 "1".

그래서 사용 return과 사용의 차이점은 무엇 return()입니까?


21
여기에있는 답변은 void(x)typeof(x)
Paul S.

3
@ PaulS.-되었다 항상 당황 void(0)이 속기를해야하는데 있기 때문에 정의되지 않은 . 그렇다면 속기 인 경우 왜 불필요한 문자를 포함합니까? ;-)
RobG 2014

1
@RobG 나는 그것이 이월에서 생각 파이썬 실제로 당신이 연산자를 포함 할 특별한 경우에 유용 할 수 있습니다 void i = 1; // ReferenceErrorvoid (i = 1); // undefined
폴 S.

1
: 당신은 C #을 적용하여 질문이 질문에 의해 즐겁게 될 수 stackoverflow.com/questions/2186595/...
에릭 Lippert의

답변:


177

사이와 동일

var i = 1 + 1;

var i = (1 + 1);

즉, 아무것도 아닙니다. 괄호는 모든 표현식에서 평가 순서에 영향을 줄 수 있기 때문에 허용되지만 예제에서는 불필요합니다.

return은 함수가 아니라 입니다. 괄호를 사용하지 않는 break및 같은 다른 간단한 제어 흐름 문과 구문 적으로 유사 continue합니다.


12
return 문은 표현식이 올 수 있습니다. 반환은 함수에 있어야하므로 함수는 표현식의 값을 반환하거나 값이없는 경우 undefined를 반환합니다 .
RobG 2014

37
@ chris97ong : 반환은 함수가 아닙니다.
RemcoGerlich 2014

34
return함수로 만들었다면 어떻게 값을 반환할까요?
dan04 2014

4
이것은 훌륭한 예가있는 훌륭한 답변이지만,이 질문으로 이어진 오해의 근원이라는 점을 고려할 때 '반환'이 주요 답변에 기능이 아니라는 점을 추가 할 가치가 있다고 생각합니다.
비스킷 베이커

3
@BiscuitBaker : 조금 추가했습니다. 나는이 짧은 대답을 두었다 때 나는 않았다 하지 ... 그것은 50 + upvotes을 얻을 것으로 예상
RemcoGerlich

21

다른 점이 없다.

return함수 호출이 아니라 언어 명령문입니다. 괄호로 수행하는 모든 작업은 단순히 반환 값을 그룹화하여 평가할 수 있도록하는 것입니다. 예를 들어 다음과 같이 작성할 수 있습니다.

return (x == 0);

이 경우 x == 0부울을 반환 true하거나 false의 값에 따라 문의 값을 반환합니다 x.


6
return return 문의 시작을 나타내는 키워드입니다.
RobG 2014

1
return 문의 평가에는 "그룹화"가 필요하지 않습니다. 따라서 어쨌든 부울 반환이 있습니다.
Wolf

18

실제로 여기 우선 순위 () 가 높으므로 먼저 평가합니다.

먼저 ("1")다음과 같은 방법으로 평가를받습니다.

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

따라서 위의 문장은 다음과 같습니다.

return "1";

시각적으로보기 :

비우스

따라서 기본적으로 기능에는 차이가 없지만 두 번째는 먼저 대괄호를 해결하므로 약간 느릴 수 있습니다.


2
그렇지 않은데 왜 "두 번째는 무시할 수있을 정도로 약간 느릴 수있다"는 완전히 검증되지 않은 주장을했을까요?

9

전혀 차이가 없습니다. return 문의 JS (ECMAScript) 사양을 살펴 보겠습니다 . 다른 많은 것 중에서 다음과 같은 내용이 있습니다.

return [여기에 LineTerminator 없음] Expression;

에 식을 제공 할 수 있습니다 return. 식입니다 hello, Math.abs(x), yourCustomFunc(7), 또는 두 번째 경우에이 될 수 있습니다 1또는 (1). 1평가 후의 표현 은 정말 엽기적인 것과 (1)같고 똑같다 .(((((1))))))(+(!(+(!1))))


1
공식 참조를 위해 +1. 페이지 별 참조가 없습니까? -한 페이지 HTML이 매우 오래로드됩니다.
Wolf

@ 늑대 나는 그런 것을 찾지 못했습니다. 여기에 또 다른 하나이지만, 그것은 또한 한 페이지입니다 people.mozilla.org/~jorendorff/...
살바도르 달리

그래, 슬프다. 나는 또한 성공하지 못할 것입니다. 당신의 인용문을 return 문의 전체 구문으로 확장하는 것은 어떻습니까?
Wolf

9

차이가 없으며 괄호는 선택 사항입니다. MSDN 참조 :

return[(][expression][)];

선택적 표현식 인수는 함수에서 반환되는 값입니다. 생략하면 함수는 값을 반환하지 않습니다.

return 문을 사용하여 함수 실행을 중지하고 expression의 값을 반환합니다. expression이 생략되거나 함수 내에서 return 문이 실행되지 않으면 현재 함수를 호출 한 표현식에 undefined 값이 할당됩니다.


8
MS만이 return 문 에서 그룹화를 "선택 사항"으로 만들려고 생각 합니다 . 어떤 표현이나 문법의 다른 많은 부분에서와 같이 "선택적"입니다.
RobG 2014

@RobG :하지만 분명히 return성명서 에서 질문을받을 가능성이 훨씬 더 높습니다 . : P MS는 아마도 JS noobs의 질문을 처리하는 데 지쳤을 것입니다.
cHao 2014

2
M $ 설명이 잘못되었습니다. 는 (), return 문의 일부가 아닙니다.
Salman A

4
"독자에게는 차이가 있습니다." 음, 그래 : MSDN의 스펙은 잘못 것을 의미 return (expressionreturn expression)법률이다.
Jim Balter 2014-04-13

2
@JimBalter Along with return (), return (and return ): P
Paul

9

return이다 성명은 return 문 시작하는 키워드 , 하지 함수를.

앞서 언급했듯이 추가 괄호는 평가 순서에 영향을 주지만라는 함수를 "실행"하는 데 사용되지 않습니다 return. 이것이 바로이 라인이 문제없이 작동하는 이유입니다.

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

사실상 다음 줄과 동일합니다.

return 1;
var a = 1;

그 이유는 return()구문 오류가 정확한 이유입니다 던져 다음 줄에 오류가 발생합니다 (비교를 위해 포함 return 문) :

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

그리고 부수적으로, return뒤에 아무것도 포함하지 않으면를 반환하고 싶다고 가정합니다 undefined.
IQAndreas 2014

@Wolf 표현식은 선택 사항이므로 return그 자체가 return 문입니다.
Paul

6

인간에게는 큰 차이가 있으며 Javascript 엔진에는 차이가 없습니다.

return 1값 1을 산출하는 함수를 즉시 종료해야한다고 선언 하는 입니다.

return(1)자바 스크립트에서 괄호 바깥쪽에 공백을 삽입 할 의무가 없다는 바보 관습에 의해 함수 호출 로 위장한 동일한 문장 입니다. 프로덕션 시스템에서 이와 같은 코드를 사용한다면 모든 관리자는 return()코드베이스 어딘가에 실제로 기능 이 있는지 또는 return키워드가 무엇인지 모르는지 결정하는 데 약간의 시간을 보낸 후 스테이크와 횃불을 가지고 사무실에 올 것 입니다.

다른 많은 사람들이 이미 올바르게 말했듯이 괄호는 숫자에 대한 리터럴보다 우선 순위가 높은 "그룹"을 제외하고는 아무것도하지 않습니다 1.


3
"인간에게는 큰 차이가 있습니다"-유능한 사람은 아닙니다. "함수 호출로 위장한 동일한 명령문"- return함수 가 없습니다 . "자바 스크립트에서 괄호 밖에 공백을 삽입 할 의무가 없다는 멍청한 관습"-거의 모든 언어에서이를 요구하지 않습니다. 이것을 바보라고 부르는 것은 바보입니다. "어떤 관리자도 말뚝과 횃불을 들고 사무실에 올 것입니다."유능한 사람은 없을 것입니다. return(1)나쁜 습관이지만 그런 것에 화를내는 사람들은 자원을 낭비하고 나쁜 분위기를 조성하고 있습니다.
Jim Balter 2014-04-13

@JimBalter "유능하지 않은 사람"-하! "그것을 요구하는 언어는 거의 없습니다."이것이 제가 "컨벤션"이라고 말한 이유입니다. 멍청하면 "멍청한"이라고합니다. " return기능 이 없습니다 "-인터프리터가 이름으로 함수를 등록하는 것을 금지한다는 사실 return은 코드 독자가 자신의 온전함을 먼저 의심하지 않는 데 도움이되지 않으므로이 코드는 낭비입니다. return(1)단순히 "불량한 연습"이 아니라 그가 무엇을하는지 모르는 누군가의 위험한 신호입니다!
hijarian 2014-04-14

2
그래서 당신은 "의무"가 무엇을 의미하는지 모르거나 당신의 주장을 변경하고 있습니다.
Jim Balter 2014

나는 당신의 마지막 문장을 의심합니다. return(이 키워드가있는 모든 언어에서) 가장 낮은 우선 순위를가집니다. 따라서 선택적 표현식이 있으면 항상 먼저 평가됩니다.
Wolf

4

return 문 에서 식을 둘러싼 괄호 는 이미 내장되어 있습니다.

JavaScript에서 다른 많은 언어 (예 : C, C ++, Java, Python)와 마찬가지로 return 문에는 키워드 return와 (선택 사항) 표현식이라는 두 부분이 있습니다. 따라서 어떤 경우 든 키워드 뒤에 오는 모든 return것은 먼저 표현식으로 평가되고 그 후에는 컨트롤을 호출자에게 다시 전달하여 return 문이 "실행"됩니다.

괄호를 사용하거나 사용하지 않는 것은 스타일문제 이지만 대부분의 스타일 가이드는 반환 값이 함수처럼 잘못 보이도록 만들기 때문에 질문에 인용 된 것과 같은 사소한 경우에 대해 금지합니다.

추후 부록

괄호를 포함하거나 포함하지 않는 경우 return, 즉 같은 줄에 선택적 표현식을 배치하는 것을 잊지 마십시오 . JavaScript 의 실제 함정 은 그 return뒤에 줄 바꿈을 추가하는 것입니다.

function test() {
  return 
  1;
}

... 위의 test함수가 반환 되기 때문에undefined .


1

괄호를 추가하여 참조를 위해 javascript가 return 후 작성된 여러 명령문 앞에 세미콜론을 삽입하지 않도록했습니다.- https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar #Automatic_semicolon_insertion

:

return a + b;

로 변형됩니다

return; a + b;

ASI에 의해.

콘솔은 "return 문 후 도달 할 수없는 코드"를 경고합니다. 이 문제를 방지하려면 (ASI를 방지하기 위해) 괄호를 사용할 수 있습니다.

return ( a + b );
코드 복사 :-https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/return


이것은 절대적으로 정확하며 복잡한 표현에 적합합니다. 그러나 더 명확하게하려면 첫 번째 문장에서 같은 줄 이나 return 바로 뒤에 추가해야합니다 . 나는 반대표가 이것에 대한 오해에서 비롯된 것이라고 생각합니다.
Wolf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.