2013-05-24 4 views
1

jquery UI 소스 코드 https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.button.js에서 두 번째 매개 변수로 정의되지 않은 값을 사용하여이 범위 캡슐화를 보았습니다. jquery UI 플러그인을 작성 중이므로 매개 변수에서 정의되지 않은 값을 설정하는 것이 어떤 것인지 궁금합니다.jQuery 함수에서 두 번째 매개 변수로 'undefined'를 사용하는 이유는 무엇입니까?

(function($, undefined) { 
//... 
}(jQuery); 
+0

좋은 질문입니다! 나는 이것에 대해서도 궁금해했다. –

+0

이것은 undefined가 실제로 undefined를 의미하는지 확인하는 데 사용됩니다. 즉, 코드 undefined = abc (값이 할당 됨)에서 실수로 잘못하면 if (something === undefined)를 쓸모 없게 만듭니다. abc와 비교하여 정의되지 않은 값. } $ (jQuery); '$에는 jQuery가 할당되었지만 undefined에는 값이 할당되지 않습니다. –

답변

2

"진짜"undefined 값에 대한 포인터가 있어야합니다.

일반적으로 JavaScript에서는 undefined에 저장된 값을 수정할 수도 있습니다. 따라서 많은 유스 케이스가 손상됩니다. 이것은 또한 사용해 minifier를 사용하는 경우, 코드 크기를 줄이는 데 도움이 @Christoph에 의해 코멘트에서 언급 한 바와 같이

undefined = 'abc'; 
var obj = { prop: 'abc' }; 

if (obj.prop == undefined) { 
    // do something 
    // this is actually called despite the fact, that the property is set! 
} 

편집

. 여기서, 로컬 undefined은 일반적인 변수로서 취급되며, 이는 예를 들어, a으로 축소 될 수 있고 따라서 코드 크기를 감소시킬 수있다.

+0

이렇게하면'typeof obj.prop '를 사용하는 이유 때문에 undefined가 실제로 정의되지 않았습니다. === 'undefined ''. – SeinopSys

+3

htm5는 읽기 전용으로 정의합니다. 가장 현대적인 브라우저가이를 준수합니다. 더 관련성이 높은 이유는 가변 문자로 단일 문자로 축소 될 수 있다는 것입니다. – Christoph

+0

@ DJDavid98'undefined'는 여전히 덮어 쓸 수 있습니다. 구식 브라우저에서 – Christoph

1

실제 undefined를 가리키는 함수에 대해 정의되지 않은 변수의 로컬 복사본을 만듭니다. 따라서 누군가가 전역 적으로 정의되지 않은 값을 변경하면 코드에 영향을 미치지 않습니다.

자체 실행 기능에서 두 번째 매개 변수를 전달하지 않으므로 작동하는 방식입니다. 따라서 정의되지 않은 변수의 값은 실제로 정의되지 않습니다.

관련 문제