1. 익명함수 개요
익명 함수에 대해 처음 알게 된 것은 jQuery를 열었을 때 가장 먼저 본 것은 jquery 소스 코드였습니다.
다음과 같이 코드 코드를 복사합니다.
(함수( 창, 정의되지 않음 ) {..................................})(창);
이것은 빨간색으로 매개변수가 있는 익명 함수입니다. 익명 함수의 기능은 닫힌 영역을 만드는 것이며 내부의 변수와 메소드는 외부에서 접근할 수 없습니다.
액세스할 수 없으므로 jquery를 어떻게 호출할 수 있나요? 이는 jquery의 익명 함수에 다음 두 문장(파란색 텍스트)이 있기 때문입니다.
다음과 같이 코드 코드를 복사합니다.
(함수(창, 정의되지 않음) {
// jQuery의 로컬 복사본을 정의합니다.
var jQuery = 함수(선택기, 컨텍스트) {
// jQuery 객체는 실제로 '향상된' 초기화 생성자일 뿐입니다.
return new jQuery.fn.init( 선택기, 컨텍스트 );
},
.........
window.jQuery = window.$ = jQuery;
})(창문);
익명 함수에서 window에 jQuery가 전달되는 것으로 밝혀졌는데, 이것이 매개 변수 전달 시 window가 전달되는 이유이므로 앞으로 jquery가 호출될 때마다 window의 jQuery 개체가 실제로 호출됩니다.
jquery는 자체 메서드를 호출합니다. 외부에서 호출할 수 없으므로 안전과 충돌이 보장됩니다.
2. jQuery 플러그인에 대한 위의 주제를 계속합니다.
다음은 제가 작성한 페이징 컨트롤 코드의 일부입니다.
다음과 같이 코드 코드를 복사합니다.
;(함수 ($) {
$.fn.tabing = 함수(인수) {
인스턴스 = 새 플러그인(this, arg);
};
var 인스턴스 = null;
함수 플러그인(요소){
this._tabs = $(요소);
this._tabli = $("a[href*='#']",this._tabs);
this._tabDiv = this._tabs.siblings().filter("div[id*='tab']");
this.init();
}
플러그인.프로토타입 = {
초기화: 함수(){
this._tabli.addClass("선택 취소됨");
this._tabli.eq(0).addClass("선택됨");
this._tabDiv.css("display","none");
this._tabDiv.eq(0).css("display","block");
this._tabli.each(함수(){
$(this).bind("클릭",function(){
for(var i = 0;i<instance._tabDiv.length;i++){
인스턴스._tabDiv.eq(i).css("display","none");
}
인스턴스._tabDiv.filter("#"+$(this).attr("href").split('#')[1]).css("display","block");
});
})
}
}
})(jQuery);
빨간색 단어에 주의하세요. 실제로 jQuery 플러그인은 각 플러그인의 독립성을 보장하는 익명 함수도 작성합니다. 그렇지 않으면 빨간색 단어인 $.fn.tabing이 이를 나타냅니다. 이 플러그인에는 jquery의 fn에 대한 탭이 있습니다.
이러한 방식으로 외부 jquery 개체는 플러그인과 외부 세계 간의 유일한 접촉이기도 한 태빙을 직접 호출할 수 있습니다.
3. jquery 플러그인의 익명 기능 사용에 대해 이야기한 후, window의 익명 기능에 대해 이야기해 보겠습니다.
사실 jquery 자체가 window의 익명 함수인데, 이것이 첫 번째 포인트입니다. 그렇다면 window의 익명 함수를 어떻게 작성해야 할까요?
즉, 익명 함수를 작성한 후 다음과 같이 함수의 창과 상호 작용하기 위한 인터페이스가 있습니다.
다음과 같이 코드 코드를 복사합니다.
(기능(){
함수 getObjByID(id){
return document.getElementById(id);
}
함수 __addClass(id,className,classValue){
$(id).style.className=classValue;
}
window.addClass=__addClass;
})();
또한 빨간색 단어를 보면 익명 함수 외부에서 addClass()를 호출할 수 있지만 getObjByID()는 호출할 수 없습니다.
4. 파싱 중에 익명 함수도 실행됩니다.
다음과 같이:
다음과 같이 코드 코드를 복사합니다.
함수 비디오() { };
함수 영화() { };
var _video = 새 비디오();
_video.size = 3;
_video.toString = 함수 () {
"비디오"를 반환합니다.
};
_video.getName = 함수() {
"VideoXXX"를 반환합니다.
};
var _movie = 새 영화();
(함수(부모, 자식) {
for(부모의 var 요소) {
if (!child[ele]) //부모의 복사본은 자식에 속성이나 메서드가 포함되지 않은 경우에만 복사됩니다.
자식[ele] = 부모[ele];
}
})(_video, _movie); //익명 함수 호출 방법
경고(_movie.size); //3
Alert(_movie.toString()); //[객체 객체]
경고(_movie.getName()); //VideoXXX
세 가지 경고에는 모두 익명 함수가 내부적으로 실행되었음을 나타내는 결과가 있습니다.