В чем преимущество обертывания функции jquery в замыкание? - PullRequest
7 голосов
/ 27 августа 2010

Привет. Я был занят, пытаясь поднять свои знания о JQuery на новый уровень. Пока я думаю, что все понял, но, углубившись в более продвинутые учебники, я заметил несколько случаев, когда подпрограмма JQuery завернутый в замыкание (см. ниже), однако меня смущает то, что он передает $ и возвращает JQuery. Мой вопрос почему? что я могу сделать с возвращенным JQuery?

Я бы очень признателен за любой свет, который люди могут пролить на меня.

(function($){
  $(document).ready(function(){
    var arr = $.map($("LI"), function(item, index){
      while (index < 3)
      {
        return $(item).html();
      }
      return null;
    });
    $(document.body).append("<span>The first three authors are: " +
      arr.join(", ") + "</span>");
  });
})(jQuery);

Заранее спасибо.

Rob

Ответы [ 3 ]

7 голосов
/ 27 августа 2010

Это вызывающая себя анонимная функция (безымянная функция, которая объявлена ​​и немедленно выполнена), которая принимает один аргумент, который присваивается параметру $. В качестве аргумента передается значение jQuery, функция jQuery.

Это сделано для того, чтобы сокращение $ могло использоваться внутри области функции для обозначения jQuery. Поскольку весь код внутри функции находится в области действия функции, это хороший шаблон для самостоятельного размещения кода и не загрязнения глобального пространства имен.

Это также хороший шаблон, позволяющий использовать сокращение $ для jQuery внутри функции - это может быть случай, когда сокращению $ (window.$) назначено что-то другое, что может произойти, если Вы используете несколько библиотек на одной странице. Используя шаблон, вы все равно можете использовать $ для ссылки на jQuery объект в функции для знакомства и краткости.

4 голосов
/ 27 августа 2010

Если вы пишете плагин, используйте

(function($) {
  //stuff that uses the jquery lib using $
})(jQuery);

Это эквивалентно

var __myf = function($) {
  //stuff that uses the jquery lib using $
};
__myf(jQuery);

Если вы пишете код страницы, используйте

jQuery(function($) {
  //stuff that uses the jquery lib using $
});

Здесь jQuery вызовет вашу функцию, когда она будет готова (когда документ загружен), и передаст себя в качестве первого аргумента вашей функции.

1 голос
/ 27 августа 2010

Это отображает jQuery в $ для области закрытия, предотвращая конфликты с другими библиотеками, которые также могут требовать пространство имен $ (например, MooTools).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...