모든 자바 스크립트 함수가 값을 반환해야합니까?


99

Netbeans를 사용하여 각 기능에 전문적인 주석을 추가하고 있습니다. 나는 그것을 각을 시작 그래서 /**다음 내가 누를 Enter수 있도록 넷빈즈 기능을 다음에 대한 기본 주석 방식을 충족해야합니다.

지금까지 나는 이것을 PHP 언어에만 사용하고 있었고이 경우 Netbeans는 @returns {type}PHP 함수가 실제로 return구문을 포함하는 경우에만 항상 주석 체계에 부분을 추가 했습니다 . 소위 "프로 시저"(값을 반환하지 않는 함수)에서이 부분이 누락되었습니다.

오늘은 Javascript 기능에 대해 동일한 작업을 시도했으며 Netbeans @returns {undefined}는 다음 기능이 아무것도 반환하지 않더라도 주석 체계 에 부분을 추가했습니다 .

이것은 나를 혼란스럽게했다. Netbeans는 모든 Javascript 함수가 아무것도 반환해야한다고 제안합니까? 어떻게해야합니까? 해당 댓글 구성표 부분을 무시 (또는 삭제)하거나 제안을 따르고 (이것이 제안 인 경우) return false;해당 기능의 끝에 추가 하십시오.


6
반환 값을 지정하지 않으면 JavaScript가를 반환 undefined합니다. 많은 언어에서 마지막 명령문의 결과가 반환됩니다 (더 유용함, IMO). 이를 암시 적 반환 이라고 합니다 .
Zaz

답변:


189

짧은 대답은 아니오입니다.

진짜 대답은 '예 다음 JS 엔진은 일부 기능이 뭔가를 반환하는 기능에 의해 수행되는 사업을 완료되었다는 메시지가되어야한다. 이것은 또한 "완료 됨" 대신 함수가 "반환 되었습니다 " 라고 말하는 이유이기도 합니다. 반환 값이없는 C (++) 함수처럼
명시적인 return 문 undefined이없는 함수는를 반환합니다 void.

void noReturn()//return type void
{
    printf("%d\n", 123);
    return;//return nothing, can be left out, too
}

//in JS:
function noReturn()
{
    console.log('123');//or evil document.write
    return undefined;//<-- write it or not, the result is the same
    return;//<-- same as return undefined
}

또한 대부분의 모든 언어와 마찬가지로 JS에서 함수의 반환 값을 무시할 수 있습니다.

(function()
{
    console.log('this function in an IIFE will return undefined, but we don\'t care');
}());
//this expression evaluates to:
(undefined);//but we don't care

일부 매우 낮은 수준, 반환은 점프의 일종으로 변환됩니다. 함수가 실제로 아무 것도 반환 하지 않으면 다음 함수를 언제 언제 호출할지 알 수 없거나 이벤트 핸들러 등을 호출 할 방법이 없습니다.

요약하자면 : 아니요, JS 함수는 코드가 진행되는 한 아무것도 반환 할 필요가 없습니다. 그러나 JS 엔진에 관한 한, 함수 는 명시 적으로 진술을 통해 든 암시 적 으로든 항상 무언가를 반환합니다 return. 함수가 암시 적으로 반환하는 경우 반환 값은 항상 정의되지 않습니다.


5
나는 C ++ (또는 C)가 "무효를 반환한다"고 믿지 않는다. "void"태그는 아무것도 반환하지 않음을 나타냅니다. 그것은 사소한 요점이며 질문과 관련이 없습니다.
Jay

2
실제로 반환 하지 않고 void아무것도 반환하지 않지만 서명은 void반환 유형을 통해이를 반영 합니다.
Elias Van Ootegem 2015 년

명시 적 수익과 암시 적 수익에 대한 성능 이점이 있습니까?
4m1r

@ 4m1r : 글쎄요, 아마 엔진에 따라 달라집니다. 성능 차이가있는 경우 무시할 가능성이 높습니다. 암시 적 반환 vs return;는 아마도 일찍 반환해야하는 경우에만 유용 할 것입니다. 쓰기 return undefined;undefined다른 값으로 해석 되면 다른 결과가 생성 될 수 있습니다 . 대부분의 (모두는 아니지만) 브라우저는 정의되지 않은 재 할당을 시도 할 때 오류를 던지지 만 이론적으로는 여기 node.js를 사용한 예제
Elias Van Ootegem

1
@SebastianLasse : void다른 언어 (예 : C)에서 언급했습니다 . 여기서는 같은 함수를 가질 void do_someting(int *arg)수 있지만 유형이있는 변수는 가질 수 없습니다 void. C에서, void유형은 이러한 기능을하지 않도록, 정말 아니다 반환 아무것도, 그들은 단지 점프
엘리아스 반 Ootegem

26

아니오, 반환 은 필요하지 않습니다.

그러나 반환은 실제로 반환 하지 않습니다undefined


6

모든 자바 스크립트 함수가 값을 반환해야합니까?

아니요, 그렇지 않습니다. 사양의 깊숙한 곳에서 모두 약간 다른 것은 사실입니다 .

function foo() {
}
function foo() {
    return;
}
function foo() {
    return undefined;
}

...하지만 각각 을 호출 한 결과 는 동일 undefined합니다.. 따라서 실용적인 용어로 :

  1. 당신은 쓸 필요가 없습니다 return 그냥 코드 실행이 함수의 "끝에서 떨어지게"할 수 있습니다.
  2. 돌아 오는 경우 undefined , 구체적으로return;
  3. 함수를 호출 할 때 실행이 끝났는지,으로 끝났는지 return;또는로 끝났 는지 (코드에서) 알 수 없습니다 return undefined;. 그들은 모두 당신의 호출 코드와 똑같이 보입니다.

사양 다시 : 특히, 함수의 실행이 끝날 때, 사양에서 "정상"완료입니다. 그러나 return;그리고 return value;둘 다 관련 값 ( undefined) 이있는 "반환"완료이며 , 이는 약간 다릅니다. 그러나 그 차이는 다음과 같은 함수 호출 의 의미에 의해 제거됩니다 .

...

  1. 경우에 따라서 . [형태]이고 return, NormalCompletion (리턴 결과 . [값]]).
  2. ReturnIfAbrupt ( 결과 ).
  3. NormalCompletion ( undefined )을 반환합니다 .

따라서 코드에서 관찰 할 수있는 차이가 없습니다.


2

아니요, 모든 함수에 대해 무언가를 반환 할 필요는 없습니다. 선택 사항이며 코드 로직을 작성하는 방법에 달려 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.