2011-03-01 3 views
8

가능한 중복 정의되지 않은 명명 :
How does this JavaScript/JQuery Syntax work: (function(window, undefined) { })(window)?
What advantages does using (function(window, document, undefined) { … })(window, document) confer?변수는 자바 스크립트 라이브러리에

나는 많은 자바 스크립트 라이브러리가 "정의"라는 이름의 변수 알아낼 스피가 없습니다를 만들 보았다 그것 목적은 jQuery 라이브러리에서 복사 한 행입니다.

* Date: Wed Feb 23 13:55:29 2011 -0500 
*/ 
(function(window, undefined) { 

// Use the correct document accordingly with window argument (sandbox) 
var document = window.document; 
var jQuery = (function() { 

제게 그렇게하는 이유와 이점을 제안하십시오 !!

답변

7

이 같은 것입니다 :

(function(undefined) { 
    /* lots of code */ 
}()); 

이 익명 함수를 작성하고 즉시 실행합니다. 이 함수의 매개 변수는 undefined입니다. 함수에 인수가 전달되지 않으므로 변수 undefined은 실제로 자바 스크립트 primitive value undefined입니다.

왜 이렇게하고 싶습니까? 음, 문제는 실제로 다음 예기치 않은 결과가있을 것입니다 : 당신의 코드 내

var undefined = 'some text'; 

테스트 myvalue === undefined을 예컨대을 이름 undefined으로 변수를 작성하고 당신이 좋아하는 무엇으로 설정할 수 있다는 것입니다.

매개 변수가 익명 인 함수 undefined은 기본적으로 undefined의 값을 기본 값으로 "다시 설정"하므로 원하는 값으로 올바른 값이 있는지 걱정하지 않고도 확인할 수 있습니다.

6

해당 undefined이 실제로 undefined인지 확인하십시오. Paul Irish calls it the asshole effect, 페이지에 포함 된 다른 js는 정의되지 않은 의미를 바꿀 수 있으며 예기치 않은 결과가 발생합니다. 당신이 볼 무엇

+1

나는 결코 그것을 결코 이해하지 못한다. 'jQuery = {}'처럼 바보 같이 할 수도 있고, jQuery가 작동을 멈출 수도 있습니다. 'undefined = true'를 넣어서 발을 쏘고 싶다면 왜 멈추게합니까? – Andrea

+1

다른 누군가가 당신의 무작위 플러그인처럼 발에서 총격을 시도 할 수 있습니다. – Loktar