1. Обзор анонимных функций
Впервые я узнал об анонимных функциях из исходного кода jquery. Первое, что я увидел, открыв jQuery, было.
Скопируйте код кода следующим образом:
(функция(окно, неопределенное) {............................})(окно);
Это анонимная функция с параметрами, выделенными красным. Функция анонимной функции заключается в создании закрытой области, внутри которой переменные и методы не могут быть доступны извне.
Поскольку к нему нет доступа, как можно вызвать jquery? Это потому, что анонимная функция jquery содержит эти два предложения (синий текст):
Скопируйте код кода следующим образом:
(функция(окно, неопределенное) {
// Определить локальную копию jQuery
var jQuery = функция (селектор, контекст) {
// Объект jQuery на самом деле является просто «улучшенным» конструктором инициализации
вернуть новый jQuery.fn.init(селектор, контекст);
},
.........
window.jQuery = window.$ = jQuery;
})(окно);
Оказывается, jQuery передается в window в анонимной функции, поэтому при передаче параметров передается window, поэтому при каждом вызове jquery в будущем фактически вызывается объект jQuery window.
jquery вызывает свои собственные методы. Его нельзя вызвать извне, что обеспечивает безопасность и отсутствие конфликтов.
2. Продолжая тему выше, о плагинах jQuery.
Ниже приведена часть кода элемента управления подкачкой, который я написал:
Скопируйте код кода следующим образом:
;(функция ($) {
$.fn.tabing = функция (аргумент) {
экземпляр = новый плагин (это, arg);
};
экземпляр вар = ноль;
функция Плагин (элемент) {
this._tabs = $(элемент);
this._tabli = $("a[href*='#']",this._tabs);
this._tabDiv = this._tabs.siblings().filter("div[id*='tab']");
это.инит();
}
Плагин.прототип = {
инициализация: функция() {
this._tabli.addClass("не выбрано");
this._tabli.eq(0).addClass("выбрано");
this._tabDiv.css("отображение","нет");
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("дисплей", "нет");
}
экземпляр._tabDiv.filter("#"+$(this).attr("href").split('#')[1]).css("display","block");
});
})
}
}
}) (jQuery);
Обратите внимание на красные слова. На самом деле плагины jQuery также пишут анонимные функции, что обеспечивает независимость каждого плагина. В противном случае он не называется плагином. Красные слова $.fn.tabing указывают на это. в этом плагине есть табуляция для fn jquery,
Таким образом, внешний объект jquery может напрямую вызывать табуляцию, которая также является единственным контактом между плагином и внешним миром.
3. После разговора об использовании анонимных функций плагином jquery, давайте поговорим об анонимных функциях окна.
Фактически, jquery сама по себе является анонимной функцией окна, и это первый пункт. Итак, как нам написать анонимную функцию окна?
То есть после написания анонимной функции в функции остается интерфейс взаимодействия с окном, например следующий:
Скопируйте код кода следующим образом:
(функция(){
функция getObjByID(id){
вернуть документ.getElementById(id);
}
функция __addClass(id,className,classValue){
$(id).style.className=classValue;
}
window.addClass=__addClass;
})();
Также обратите внимание на красные слова: вы можете вызвать addClass() вне анонимной функции, но не можете вызвать getObjByID().
4. Анонимные функции также будут выполняться при парсинге.
следующее:
Скопируйте код кода следующим образом:
функция Видео() { };
функция Фильм() { };
вар _video = новое видео ();
_video.size = 3;
_video.toString = функция () {
вернуть «видео»;
};
_video.getName = функция () {
вернуть «ВидеоXXX»;
};
вар _movie = новый фильм ();
(функция (родительский, дочерний) {
for (var ele в родительском элементе) {
if (!child[ele]) //Копия родительского элемента будет скопирована только в том случае, если дочерний элемент не содержит атрибут или метод.
ребенок[еле] = родитель[еле];
}
})(_video, _movie); //Как вызвать анонимную функцию
оповещение(_movie.size); //3
alert(_movie.toString()); //[Объект объекта]
оповещение(_movie.getName()); //ВидеоXXX
Все три оповещения имеют результаты, указывающие на внутреннее выполнение анонимной функции.