2011-12-09 3 views
1

이유는 함수를 반환 할 때return 문 자바 스크립트

샘플

<script language="javascript"> 
    return compute(); 
    alert(1); 
</script> 

이 경고는

+4

왜냐하면'return'은 함수 컨텍스트 내에서만 사용할 수 있기 때문이다. –

답변

3

경고를 작동하지 않습니다 아래에 내가 더 많은 코드를 가질 수 있다는 것입니다하지 않습니다 직장

나에게 맞는 소리. 이 코드의 의미는 다음과 같습니다.

(function() { 
     return compute(); 
     alert(1); 
    })(); 
+0

두 줄을 뒤집지 않으시겠습니까? 첫 번째 줄로 돌아와서, 나는'alert (1)'이 일어나지 않도록 할 것이라고 믿는다. – jefflunt

+0

@normalocity 예,하지만 그것은 질문의 의도가 아닙니다. 나는 그 경고가 작동하지 않을 것이라고 단언하려고 노력했다. –

+0

아, 이해했다. – jefflunt

2

return 구문의 기능은 두 가지입니다. 먼저 값을 반환합니다 (이 경우 함수에 대한 포인터). 둘째, control flow을 관리하는 것입니다. 즉, 해당 코드를 실행중인 브라우저에 해당 함수를 남기고 실행 제어를 예제 스크립트를 호출 한 코드 조각으로 반환합니다.

또 다른 방법은 값을 반환하고 실행을 계속할 것을 기대하면서 브라우저가 다음에 무엇을해야하는지 모호하게 만듭니다.

두 줄을 뒤집 으면 (먼저 경고하고 THEN이 값을 반환 함) 두 줄이 모두 실행됩니다.

This tutorial 또한 더 많은 통찰력을 제공 할 수 있습니다.

Rob WKris Krause가 언급 한 바와 같이

는 또한, 당신 만 return 함수에서, 아직 당신이 보여준 코드가 함수에 싸여되지 수 .

+0

작은 수정 :이 경우 (나는 OP의 예를 가정한다) 반환 값은'compute()'가 반환하는 것이고 반드시 함수 일 필요는 없다. 'return compute;'는'compute()'함수를 리턴합니다. – JJJ

0

함수/클로저의 내부에서 에 return 문 아래에 코드가 있습니다. 특히, 함수 선언은 호이 스팅 될 것이므로 반환 값 이상의 코드에서 사용할 수 있습니다. 나는이 "패턴"을 항상 사용한다. 여기에 현재 코드베이스의 작은 예제가있다.

function msgHandlers() { 
    var scope 
     ,msgs; 

    return { 
     SET_CONTEXT: function(context) { 
      scope = context.scope; 
      msgs = context.messages; 
     } 

     ,SUBSCRIBE_ALL: function() { 
      me.subscribe(scope, msgs.ITEM_PINNED, itemPinnedHandler); 
     } 
    } 

    function itemPinnedHandler(record) { 
     loadInventoryRecord(record);  
    } 
}