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

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

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

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

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



답변

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

진짜 대답은 ‘예 다음 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. 함수가 암시 적으로 반환하는 경우 반환 값은 항상 정의되지 않습니다.


답변

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

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


답변

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

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

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 )을 반환합니다 .

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


답변

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


답변