1. 익명 함수 개요 내가 처음으로 익명 함수를 알게 된 것은 jQuery를 열었을 때의 소스 코드였다.
(function( window, undefine) {........ .... .......})(window);
빨간색을 매개변수로 하는 익명 함수입니다. 익명 함수의 기능은 닫힌 영역을 만드는 것입니다. , 내부의 변수와 변수는 외부 메소드로 접근할 수 없습니다.
액세스가 불가능한데 jquery를 어떻게 호출하나요? 이는 jquery의 익명 함수에 다음 두 문장(파란색 텍스트)이 있기 때문입니다.
(function( window, undefine ) {
// jQuery의 로컬 복사본 정의
var jQuery = function( selector, context ) {
// jQuery 객체는 다음과 같습니다. 실제로는 초기화 생성자 'enhanced'
return new jQuery.fn.init( selector, context )
},
........
window.jQuery = window.$ = jQuery;
})(window);
jQuery는 익명 함수에서 window로 전달되는 것으로 나타났습니다. Window가 전달되어야 하므로 나중에 jquery를 호출할 때마다 실제로 window의 jQuery 객체를 호출하게 됩니다.
Jquery는 자체 메서드를 호출합니다. 외부에서 호출할 수 없으므로 안전과 충돌이 보장됩니다.
2. 위 주제에 이어 jQuery 플러그인에 대해 다음은 제가 작성한 페이징 제어 코드의 일부입니다.
;(function ($) {
$.fn.tabing = function (arg ) {
instance = new Plugin(this, arg);
}
var 인스턴스 = null
function Plugin(element){
this; ._tabs = $(요소);
this._tabli = $("a[href*='#']",this._tabs)
this._tabDiv = this._tabs.siblings( ).filter("div[id* ='tab']");
this.init();
}
Plugin.prototype = {
init: function(){
this._tabli.addClass("unselected" );
this._tabli.eq(0).addClass("selected");
this._tabDiv.css("display","none"); >this._tabDiv.eq(0) .css("display","block");
this._tabli.each(function(){
$(this).bind("click",function( ){
for(var i = 0;iinstance._tabDiv.eq(i).css("display","none")
}
instance._tabDiv.filter( "#" $(this).attr("href").split('#')[1]).css("display","block")
} );
})
}
}
})(jQuery)
빨간색 단어에 주목하세요. in은 또한 각 플러그인의 독립성을 보장하는 익명 함수를 작성합니다. 그렇지 않으면 플러그인이라고 합니다. 빨간색 단어 $.fn.tabing은 이 플러그인에 jquery의 fn에 대한 탭이 있음을 나타냅니다.
이런 식으로 외부 jquery 개체가 tabing을 직접 호출할 수 있으며 이는 플러그인과 외부 세계 간의 유일한 연결이기도 합니다.
3. jquery 플러그인의 익명 기능에 대해 이야기한 후, window의 익명 기능에 대해 이야기해 보겠습니다.
사실 jquery 자체가 익명입니다. 윈도우의 함수, 즉 첫 번째 포인트, 그럼 윈도우의 익명함수는 어떻게 작성하나요?
익명 함수를 작성한 후 다음과 같이 함수의 창과 상호 작용하기 위한 인터페이스가 있습니다.
(function(){
function getObjByID(id){
return document.getElementById(id);
}
function __addClass(id,className,classValue){
$(id).style.className=classValue;
}
window.addClass=__addClass;
})(); >
또한 빨간색 단어를 보면 익명 함수 외부에서 addClass()를 호출할 수 있지만 getObjByID()는 호출할 수 없습니다.
4. 다음과 같이 구문 분석 중에 익명 함수도 실행됩니다.
코드 복사 코드는 다음과 같습니다.
function Video() { };
function Movie()
var _video()
_video.size = 3; .toString = function () {
return "video";
};
_video.getName = function () {
return "VideoXXX"
var _movie = new Movie();
(function (parent, child) {
for (var ele in parent) {
if (!child[ele]) //자식에 이 속성이나 메서드가 포함되어 있지 않은 경우 상위
child[ele] = parent[ele];
}
})(_video, _movie) //익명 함수 호출 방법
alert( _movie.size); //3
alert(_movie.toString()); //[객체 객체]
alert(_movie.getName()); //VideoXXX
세 가지 경고에는 모두 익명 함수가 내부적으로 실행되었음을 나타내는 결과가 있습니다.