developer tip

정의되지 않은 전달의 목적은 무엇입니까?

optionbox 2020. 12. 12. 10:39
반응형

정의되지 않은 전달의 목적은 무엇입니까?


나는 다음 jQuery과 같이 모듈 정의에 사용되는 익명 함수에 매개 변수로 jQuery.UI전달 undefined같은 관련 키 노트 플러그인 을 발견했습니다 .

(function($, undefined) { ... })(jQuery);

또는 jQuery에서 권장하는 다른 플러그인 및 / 또는 다른 플러그인이 undefined를 매개 변수로 전달하지 않는 것으로 나타났습니다.

어리석은 질문 일 수 있지만 ...

어쨌든 항상 사용할 수 있어야하지 않습니까? 왜 그것을 전달합니까? 여기에 다른 목적이나 트릭이 있습니까?


그 이유는 두 가지입니다.

1) undefined전역 개체 속성이 아닌 함수 범위의 변수 인 경우 축소자는이를 단일 문자로 줄여 더 나은 압축률을 얻을 수 있습니다.

2) ES5 * 이전 undefined에는 쓰기 방지가없는 전역 개체의 속성이었습니다. 따라서 덮어 써서 이상하고 예기치 않은 동작이 발생할 수 있습니다. 다음과 같이 할 수 있습니다.

var test = 123;
undefined = 123;
if (test === undefined){
   // this will actually be true, since undefined now equals 123
}

undefined매개 변수를 전달하지 않는 함수 인수 (실제로 이름은 중요하지 않음)를 가지면 undefined이 변수에 대해 "정의되지 않음"을 테스트 할 수 있는 변수가 있는지 확인할 수 있습니다.

Btw. undefined를 테스트하는 가장 안전한 방법은 다음과 같습니다.typeof ( var ) === 'undefined'

ECMA 스크립트 5, 세계의 호텔을 (*) undefined, NaNInfinity읽기 전용되었다. 따라서 모든 최신 브라우저에서 일반적으로 채택됨에 따라-물론 IE 9를 제외하고-이러한 값을 덮어 쓰는 것이 더 이상 불가능했습니다.


이는 undefined가 항상임을 확인하기 위해 수행됩니다 undefined. ECMAScript 사양의 이전 버전 (ECMAScript 5 이전)에서 undefined는 예약어가 아니라 일반 변수였습니다. 예를 들어 이전 브라우저에서는 다음과 같이 허용됩니다.

undefined = 2; // Assign a different value to undefined

// Now this statement would be true
if (undefined == 2)

따라서 undefined가 실제로 undefined인지 확인하려면 다른 "사악한"스크립트가 undefined를 다른 값으로 다시 할당 했더라도 undefined라고 호출하는 매개 변수를 만든 다음 함수를 호출 할 때 전달하지 않도록합니다. 해당 매개 변수에 대한 값-따라서 정의되지 않은 변수가 항상 함수 내에서 정의되지 않음을 확인할 수 있습니다.

따라서 jQuery의 경우 :

(function($, undefined) { ... })(jQuery);

그들은 jQuery를 전달하고 편의를 위해 $ 변수에 할당하지만 정의되지 않은 매개 변수에 두 번째 값을 전달하지 않으므로 undefined가 정의되지 않습니다.

최신 브라우저

최신 브라우저에서는 ECMAScript 5 사양에undefined 따라 구성 및 쓰기가 불가능한 속성입니다 .


undefined는 javascript의 예약어가 아니라 단순히 변수입니다. jQuery는 일부 나쁜 개발자가 자바 스크립트에서 undefined 값을 덮어 쓰는 경우 jQuery는이를 무시하고 값을 전달하지 않는 자체 변수 undefined를 설정합니다 (마지막의 자체 실행 (jQuery) 참조). 따라서 실제로 정의되지 않았습니다.

참고 URL : https://stackoverflow.com/questions/9602901/what-is-the-purpose-of-passing-in-undefined

반응형