2010-06-21 3 views

답변

9

부모가 오염되지 않도록 새 범위를 만드는 것입니다.

{ 
    var a = "foo"; 
} 
// a still == "foo". 

(function() { 
    var b = "bar"; 
})(); 
// b doesn't exist. 

그러나, 함수는 항상 새로운 범위를 만들 : 당신은 혼자 중괄호를 사용할 때 놀랍게도 (C와 같은 언어에 익숙한 초보자), 자바 스크립트는 새 범위를 만들지 않습니다. JavaScript의 클로저 덕분에 상위 범위의 기존 변수가 익명 함수로 자동으로 전달 (닫힌)됩니다. 따라서 익명의 함수가 어디에도 사용되지 않는 (질문이있는 것처럼) 절대 할당되지 않았기 때문에 기본적으로 C 스타일 중괄호처럼 작동합니다.

2

글로벌 네임 스페이스의 오염을 방지합니다. 즉, 식별자는 나머지 페이지/코드/스크립트로 누출되지 않습니다.

3

다른 많은 중괄호로 구분 된 언어와 달리 JavaScript는 변수를 가장 가까운 블록으로 범위 지정하지 않습니다. 대신 var은 범위 변수를 둘러싼 함수에 기술합니다. 자바 스크립트 프로그래머가 흔히 저지르는 실수는 var을 루프 내부에 선언하거나 블록의 끝에서 범위를 벗어날 것이라는 가정하에 조건부로 선언하는 것입니다.

익명 함수를 만든 다음 즉시 (()을 삽입하여)이를 실행하면 새 범위가 만들어져 wil 내에서 선언 된 변수가 다른 JavaScript를 방해하지 않도록합니다. 다른 것을 괄호로 묶는 표현식이 만들어지기 때문에 브라우저의 호환성을 극대화하기 위해 구문의 모호성을 해결할 수 있습니다.

관련 문제