2013-02-03 4 views

답변

3

표시되는 코드가 컴파일되지 않습니다. 코드를 직접 함수 정의없는으로서,라고

(function(){ 
    var a; // a isn't visible outside 
    // code using a 
})(); 

:

(function xyz(){ //function code here ; 
})(); 

는 대부분의 경우 이러한 기능은 익명 : 괄호로

이 명명 된 즉시 호출 함수가 될 것이다 추가 그러나 그러한 함수의 요점은 스코프의 변수가 둘러싸는 곳에서 유출되지 않도록 스코프 (전역 스코프 또는 함수 일 수 있음)를 정의하는 것입니다. 이 패턴은 코드를 깨끗하게 만드는 데 매우 유용합니다. 외부 범위에 변수를 추가하지 않고 기존 범위를 지울 수 없습니다.

이 함수에는 또한 재귀를 위해 내부에서 사용할 수있는 이름이 있습니다.

(function xyz(){ 
    var a; // a isn't visible outside 
    // code using a and calling xyz 
})(); 
+0

'xyz.a'를 좋아하지 않는다면 어쨌든 'a'는 외부 세계에 보이지 않을 것이라고 생각했습니다. –

+0

@CrayonViolent 함수를 정의하지 않고 직접 루트 수준의 코드를 사용하면 변수가 아무 것도 내부에 있지 않습니다. –

+0

함수가 이미 함수 식인 경우에는 바깥 괄호가 필요하지 않습니다. 함수 호출'someOtherFn (function xyz() {}(), otherParams)'내부에서 호출 함수를 호출 할 때 Immediately-Invoked라고 부릅니다. –