programing

이 JavaScript/jQuery 구문은 어떻게 작동합니까: (function(window, 정의되지 않음) {}(window)?

megabox 2023. 8. 7. 22:26
반응형

이 JavaScript/jQuery 구문은 어떻게 작동합니까: (function(window, 정의되지 않음) {}(window)?

jQuery 1.4 소스 코드의 후드 아래를 살펴보고 다음과 같은 방식으로 캡슐화되는 방법을 알아본 적이 있습니까?

(function( window, undefined ) {

  //All the JQuery code here 
  ...

})(window);

저는 자바스크립트 네임스페이스와 "부모중요한 한 "이라는 기사를 읽은 적이 있습니다. 그래서 저는 여기서 무슨 일이 일어나고 있는지 어느 정도 알고 있습니다.

하지만 저는 이 특정 구문을 전에 본 적이 없습니다.저기서 뭐하는 거지?그리고 왜 통과된 후에 다시 마지막에 나타나야 합니까?

정의되지 않은 변수는 정규 변수이며 다음을 사용하여 간단히 변경할 수 있습니다.undefined = "new value";그래서 jQuery는 정말로 정의되지 않은 로컬 "정의되지 않은" 변수를 만듭니다.

성능상의 이유로 창 변수가 로컬로 변경됩니다.왜냐하면 JavaScript는 변수를 검색할 때 변수 이름을 찾을 때까지 먼저 로컬 변수를 검색합니다.발견되지 않을 경우 자바스크립트는 다음 범위 등을 거칩니다.글로벌 변수를 통해 필터링할 때까지.따라서 창 변수를 로컬로 만들면 JavaScript에서 더 빨리 찾을 수 있습니다.추가 정보:자바스크립트 속도 향상 - Nicholas C.

정의되지 않음

선언함으로써undefined인수로 사용되지만 값을 전달하지 않으면 글로벌 범위에서 덮어쓸 수 있는 변수일 뿐이므로 항상 정의되지 않습니다.이것은 만듭니다.a === undefined에 대한 안전한 대안.typeof a == 'undefined'몇 글자를 저장할 수 있습니다.그것은 또한 코드를 더 미니머 친화적으로 만듭니다.undefined으로 단축할 수 있습니다.u예를 들어, 몇 개의 문자를 더 저장합니다.

패싱window인수는 성능에 영향을 미치는 로컬 범위의 복사본을 유지합니다. http://jsperf.com/short-scope에 대한 모든 액세스window이제 스코프 체인에서 한 단계 더 위로 이동해야 합니다.와 마찬가지로undefined로컬 복사본을 사용하면 보다 적극적으로 축소할 수 있습니다.


참고 사항:

이것은 jQuery 개발자들의 의도가 아닐 수도 있지만, 전달합니다.window글로벌하지 않은 node.js와 같은 서버 측 Javascript 환경에서 라이브러리를 보다 쉽게 통합할 수 있습니다.window물건.이러한 상황에서는 하나의 라인만 변경하면 됩니다.window이를제기다하경 jQuery 우의, mock.windowHTML 스크레이핑을 위해 객체를 만들고 전달할 수 있습니다(jsdom과 같은 라이브러리는 이를 수행할 수 있습니다).

은 다른사은설명다니습했들람다니습을 설명했습니다.undefined.undefined는 임의의 값으로 재정의할 수 있는 전역 변수와 같습니다.이 기술은 누군가가 다음과 같이 썼을 때 정의되지 않은 수표가 깨지는 것을 방지하기 위한 것입니다.undefined = 10절대 되지 않는 진짜라는 합니다.undefined변수 값에 관계없이 undefined.

창을 통과하는 이유는 다음 예를 통해 설명할 수 있습니다.

(function() {
   console.log(window);
   ...
   ...
   ...
   var window = 10;
})();

콘솔은 무엇을 기록합니까?window목적어 맞습니까??! 10개 땡! 땡! 땡! 땡!로그에 기록됩니다.undefined interpreter 컴파일러)는 - Javascript 인또터리는 (JIT 컴러파일씁)다음니다시다같이터과프는▁jav는다.

(function() {
   var window; //and every other var in this function

   console.log(window);
   ...
   ...
   ...
   window = 10;

})();

하지만, 만약 당신이 그것을 받는다면.window변수를 인수로 지정합니다. 변수가 없으므로 예상치 못한 변수가 없습니다.

, jQuery ▁jqu▁i▁you,▁are있qu▁redef면다.window로컬 변수는 어떤 이유로든 함수의 어느 곳에서나 사용할 수 있으며, 글로벌 범위에서 빌려 사용하는 것이 좋습니다.

windowIE에서에도 마찬가지로 되는 것은 IE에서 창 객체를 다시 정의하기로 결정한 경우에도 합니다.undefined나중에 어떤 식으로든 재발급될 경우를 대비해서요.

위 맨window " " 크인인 " 그을할 " 정니뿐 " 입다지 " 더 입니다.window참조 및 이 폐쇄 내부의 코드가 사용할 내용입니다.window마지막에는 실제로 첫 번째 인수에 대해 무엇을 통과시킬 것인지 지정하는 것입니다. 이 경우의 현재 의미는window은 당신이 입니다...희망은 당신이 망치지 않는 것입니다.window

이것은 jQuery에서 사용되는 가장 일반적인 사례인 플러그인 처리를 보여줌으로써 더 쉽게 생각할 수 있을 것입니다. 그래서 당신은 여전히 대부분의 코드를 사용할 수 있습니다.$비록 그것이 다른 것을 의미하더라도jQuery를 벗어나면 다음과 같습니다.

(function($) {
  //inside here, $ == jQuery, it was passed as the first argument
})(jQuery);

1000000회 반복하여 테스트했습니다.이러한 종류의 현지화는 성능에 영향을 미치지 않았습니다.1000000회 반복되는 시간은 단 1밀리초도 되지 않습니다.이것은 정말 쓸모가 없습니다.

언급URL : https://stackoverflow.com/questions/2716069/how-does-this-javascript-jquery-syntax-work-function-window-undefined

반응형