2012-06-21 2 views
10

함수의 닫는 중괄호 바로 뒤에 괄호를 사용하는 Javascript 코드를 보았습니다. 사용 된 것을 이해할 수 없습니다.중괄호 뒤에 오는 괄호는 무엇을 의미합니까?

예 :

function foo(bar){ 
    return bar; 
}(0); 
  • (0)은 무엇입니까?

  • 무엇이라고합니까?

  • 언제이 기술을 사용해야합니까?

그들은 즉시 당신이 함수를 호출 할 때와 비슷한 함수를 호출
+2

그냥 나쁜 예제를 제공 한 경우, 다음 질문의 중복 (HTTP [자바 스크립트 객체/함수/클래스 선언을 둘러싼 괄호 무슨 뜻 이죠?] //stackoverflow.com/questions/440739/what-do-parentheses-surrounding-a-javascript-object-function-class-declaration-m). –

답변

9

, 당신은 단순히 두 개의 문을 가지고 있고 그것은하는 것과 같습니다

function foo(bar){ 
    return bar; 
} 
0; 

이것은 이 아니며 자체 호출 기능입니다. 첫 번째 문은 함수 선언이고, 두 번째 문은 단순히 숫자 리터럴 0이며 아무 것도 수행하지 않습니다. 괄호는 함수를 실행하지 않으며, grouping operator입니다.

어떻게 증명할 수 있습니까? 시도 :

function foo(bar){ 
    return "bar"; 
}(0); 

출력 내용을 알려주십시오. 우리는 함수 표현식이 있다면


그것은, 자기 호출 함수가 될 것입니다. 이를 위해 그룹화 연산자를 사용하여 표현식으로 계산되도록 할 수 있습니다. 예를 들어

는 :

(function foo(bar){ 
    return bar; 
})(0); 

이 명명 된 함수식이다. 표현식 ((function ....))의 결과는 함수 참조이며 (0)은 인수로 0을 전달하여 함수를 실행합니다.

는 괄호의 위치도 수 :

(function foo(bar){ 
    return bar; 
}(0)); 

어쩌면 이것은 당신이 본 것입니다.

이 기술은 이미 광범위하게 여기에서 논의되었다 What is the purpose of a self executing function in javascript?

+0

펠릭스 감사합니다, 당신은 독수리 눈을 가지고 있어야합니다 :) – jon

11

는 :

function foo() { 
    alert('hello'); 
} 

foo(); // call 

당신은 또한 직접호출 할 수 있습니다 :

(function foo(){ 
    alert('hello'); 
})(); // <-------------- 

는 현재 당신이 Function Declaration이 .

(function foo(bar){ 
    return bar; 
})(0); 

을 그리고 지금은 Function Expression하고 즉시 호출합니다 : 실제로, 당신은 괄호이처럼이 필요 자기 호출하려면 (그것을 표현하기 위해). Function DeclarationFunction Expression의 차이를 알고, Kangax하여이 우수한 기사를 체크 아웃 :


(0)의 기능은 무엇입니까?

그것은 너무 bar 함수 내에서 0foo 함수에 전달 된 인수입니다.

이게 무엇입니까?

자기 기입 기능 또는 자체 실행 기능입니다. this을보고 싶을 수도 있습니다.

언제이 기술을 사용해야합니까?

함수를 즉시 호출하고 변수 범위를 해당 함수 식에만 유지하려는 경우. 외부 세계 나 함수 표현식 외부의 코드에서는 사용할 수 없습니다.


상세 정보 :

+0

팁 :'(function (...) {...}) (...);'반환 값이 var에 할당되지 않은 익명 함수를 사용하는 경우에도 항상 작동합니다. –

+0

이것은 불행히도 올바르지 않습니다. . 내 대답을 보라. 그러나 아마도 OP는 나쁜 예를 보여 주었을 것입니다. –

+0

@FelixKling : +1. OP의 구문을 간과하고 자세한 내용을 추가했습니다. – Sarfraz

0

이 자체 호출 기능입니다. 0을 매개 변수로 전달합니다. 예를 들어 0

동일 따라서 함수가 반환 될 줄은 아래의 기능은 동일합니다 : 당신의 예에서

function foo(bar) { 
    return bar; 
} 

foo(0); // returns 0 
관련 문제