2011-06-14 5 views
3

자바 스크립트 함수에서 함수 작성하는 다음과 같은 방법으로 설명해주십시오 :자바 스크립트 기능

(function(){ 
// some code 
})() 

내가 때문에 중괄호 "()"로, 기능이 바로 실행 것이라는 사실을 이해를하지만,하지만, 무엇을 중괄호에 함수를 묶는 것은 의미합니까?

+4

두 번째는 구문 오류입니다. 함수 선언에 이름이 있어야합니다. – RobG

+0

코멘트 주셔서 감사합니다. –

+1

[이게 무슨 뜻입니까? (함수 (x, y)) {...}) {a, b}; (이 스크립트/자바 스크립트/jQuery 구문의 의미는 무엇입니까?] (http : //stackoverflow.com/questions/3921922/what-does-this-mean-function-xyab-in-javascript) –

답변

5

구문이 잘못되었습니다. 수정 : 수정 됨. 당신이 한 번만 호출 할 일반 함수 정의에서

봐 : 당신이 바로 그것을 실행할 수 있도록이 코드를 줄일 수

function add(x,y) { 
    var z = x + y; 
    // do something with z 
} 

add(2,3); 

, 그것은을 추가 이름을 할 필요가 없다 :

(function(x ,y) { 
    var z = x + y; 
    // do something with z 
})(2,3) 

함수를 호출 가능한 식으로 만들기 위해 괄호 집합으로 둘러싸인 방법에 유의하십시오. 이 패턴은 종종 특정 변수의 클로저 (상태 캡처)를 만드는 데 사용됩니다.

jQuery.noConflict(); //Disables the use of $ in the global scope 
(function($) { 

    //Safely use $ inside this function 
    $('.link').click(function(e) { 
     //etc 
    }); 

})(jQuery); 
+0

답변으로 jQuery를 관리하는 데 거의 가치가있는 +1입니다. – RobG

+0

이 특별한 이유 때문에이 자체 호출 익명 패턴이 항상 나타납니다. 그래서 그것을 포함 시켰습니다. jQuery -1 없음 :) –

4

RobG이 지적했듯이, 이것은 원래 질문에서 유일하게 유효한 진술입니다.

(function(){ 
// some code 
}()) 

이 코드는 구문 분석 된 직후에 실행되며 나머지 코드에서 함수 내부의 코드 범위를 벗어나는 방법을 제공합니다. 이 폐쇄 (Closures on MDN 참조) 및 help with memory leaks 스크립트에서 호출 할 수 있습니다.

1

코드를 그룹화 연산자로 묶으면 함수 선언에서 함수 표현식으로 변경됩니다 (여기서 이름은 선택적이며 대개 생략됩니다). 그 패턴은 흔히 "즉시 호출 된 함수 표현식"(iife) 또는 "즉시 실행 된 함수 표현식"(iefe)으로 불립니다.

한 번 호출되는 함수 선언을 바꾸는 데 사용됩니다. 모듈 패턴의 기본이기도합니다.