2013-02-14 2 views
1

일부 변수를 정의 할 필요가있는 자바 스크립트 코드를 호출하고 싶지만이 코드를 분리하여 전역 범위를 오염시키지 않도록하고 싶습니다. 그래서 나는 즉시 전화, 익명 함수 객체에 모든 것을 포장하고, 또는 아무것도의 결과를 지정하지 않은 :전역 범위를 수정하지 않고 자바 스크립트를 실행하는 방법은 무엇입니까?

function() { 
    var myInnerHelperFunction = function(object) { 
     //do some work 
    }; 

    var anObject = ...; 

    myInnerHelperFunction(anObject); 
}(); 

을하지만 구문 오류 얻을 : 당신은 호출 할 수 없습니다 SyntaxError: Unexpected token (

답변

8

을 함수 선언. 대신 표현식으로 만들어야합니다. (오히려 선언보다 parsed as an expression을 할 구조물 원인이 무엇이든), 그러나

(function() { 
    var myInnerHelperFunction = function(object) { 
     //do some work 
    }; 

    var anObject = ...; 

    myInnerHelperFunction(anObject); 
}()); 

어떤 단항 연산자도 작동합니다주의 :이를 달성하기 위해 가장 일반적으로 본 기술은 괄호의 기능을 래핑하는 것입니다

~function example() { 
    console.log("example"); 
}(); 

이렇게 확장하면 함수에 식별자가 없어 코드가 실제로 구문 오류를 발생시킵니다. "프로그램"은 명령문 및 함수 선언 만 포함 할 수 있습니다. 따라서 코드를 함수 선언으로 파싱해야합니다. 함수 선언에는 식별자가 있어야합니다. 귀하의 프로그램은 유효하지 않으므로 프로그램이 유효하지 않습니다.

함수 주위에 괄호를 넣으면 구문 분석 트리가 달라집니다. 괄호는 구문을 포함 할 수있는 "표현 문"으로 구문 분석됩니다. 함수는 표현식이나 선언문으로 파싱 될 수 있기 때문에 표현되는 문맥에 따라 적절하며 함수는 표현식으로 파싱됩니다. 함수 표현식을 즉시 호출 할 수 있으므로이 방법이 효과적입니다.

관련 문제