가능한 중복 :이 무엇을하고 있는지다음 JS 구조의 목적은 무엇입니까?
(function() { // blah blah })();
어떤 아이디어와 그 부작용은 무엇인가 :
JavaScript: Why the anonymous function wrapper?
때때로 내가 JS 프로그램이 같은 구조를 볼 수 혜택?
가능한 중복 :이 무엇을하고 있는지다음 JS 구조의 목적은 무엇입니까?
(function() { // blah blah })();
어떤 아이디어와 그 부작용은 무엇인가 :
JavaScript: Why the anonymous function wrapper?
때때로 내가 JS 프로그램이 같은 구조를 볼 수 혜택?
부모가 오염되지 않도록 새 범위를 만드는 것입니다.
{
var a = "foo";
}
// a still == "foo".
(function() {
var b = "bar";
})();
// b doesn't exist.
그러나, 함수는 항상 새로운 범위를 만들 : 당신은 혼자 중괄호를 사용할 때 놀랍게도 (C와 같은 언어에 익숙한 초보자), 자바 스크립트는 새 범위를 만들지 않습니다. JavaScript의 클로저 덕분에 상위 범위의 기존 변수가 익명 함수로 자동으로 전달 (닫힌)됩니다. 따라서 익명의 함수가 어디에도 사용되지 않는 (질문이있는 것처럼) 절대 할당되지 않았기 때문에 기본적으로 C 스타일 중괄호처럼 작동합니다.
글로벌 네임 스페이스의 오염을 방지합니다. 즉, 식별자는 나머지 페이지/코드/스크립트로 누출되지 않습니다.
다른 많은 중괄호로 구분 된 언어와 달리 JavaScript는 변수를 가장 가까운 블록으로 범위 지정하지 않습니다. 대신 var
은 범위 변수를 둘러싼 함수에 기술합니다. 자바 스크립트 프로그래머가 흔히 저지르는 실수는 var
을 루프 내부에 선언하거나 블록의 끝에서 범위를 벗어날 것이라는 가정하에 조건부로 선언하는 것입니다.
익명 함수를 만든 다음 즉시 (()
을 삽입하여)이를 실행하면 새 범위가 만들어져 wil 내에서 선언 된 변수가 다른 JavaScript를 방해하지 않도록합니다. 다른 것을 괄호로 묶는 표현식이 만들어지기 때문에 브라우저의 호환성을 극대화하기 위해 구문의 모호성을 해결할 수 있습니다.
비슷한 최근 질문 : http://stackoverflow.com/questions/3082149/javascript-why-use-an-anonymous-function-here –