Новичок jQuery: что означает jQuery (функция ($) {...})? - PullRequest
18 голосов
/ 23 июня 2011

Я знаю, что в jQuery $(callback) - это то же самое, что и jQuery(callback), который имеет тот же эффект, что и $(document).ready().

Как насчет

jQuery(function($) {

 });

Может кто-нибудь объяснитьмне, что означает эта функция?

Что это делает?

В чем разница между этим и $(callback) ??

В чем разница между этим и $(function()) ??

Ответы [ 5 ]

17 голосов
/ 23 июня 2011
jQuery(function($) {

});

- самая безопасная версия из всех трех. Это делает $ локальной переменной и, таким образом, изящно избегает конфликтов с любыми другими переменными, которые могут использовать символ $.

Я думаю, что он также был добавлен довольно недавно, не помню, чтобы видел его раньше.

Все эти функции делают одно и то же - выполняют некоторый код, когда DOM готов. $(document).ready(function(){}) является исходным и соответствует базовому API JavaScript.

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

16 голосов
/ 23 июня 2011
  • $(function()) - синтаксическая ошибка.
  • $() создает пустой объект jQuery.
  • $(document).ready(function() { ... }) выполняет данную функцию, когда DOM готов
  • $(function() { ... }) - это ярлык для той же вещи
  • jQuery(function($) { ... }) тоже делает это, но он также делает $ доступным внутри функции независимо от того, какое значение она имеет снаружи.
2 голосов
/ 23 июня 2011

Так что я поправился к этому, и если вы прочитаете первый комментарий, он даст некоторый контекст.

jQuery(function() {
    // Document Ready
});


(function($) {
    // Now with more closure!
})(jQuery);

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

РЕДАКТИРОВАТЬ:

Я в значительной степени прав, но здесь это прямо из ихвеб-сайт:

http://docs.jquery.com/Plugins/Authoring

"Где мой удивительный знак доллара, который я знаю и люблю? Он все еще там, однако, чтобы убедиться, что ваш плагин не конфликтует с другими библиотеками, которые могут использоватьзнак доллара. Лучше всего передавать jQuery самовыполняющейся функции (замыкание), которая сопоставляет его со знаком доллара, чтобы его нельзя было перезаписать другой библиотекой в ​​области его выполнения. "

1 голос
/ 23 июня 2011

Когда вы вызываете основную фабричную функцию jQuery (как jQuery(<something>) или общий ярлык $(<something>)), она решает, что делать, основываясь на типе <something>.

Если вы передаете строкукак <something> предполагается, что это спецификация селектора, и возвращает список jQuery элементов, соответствующих этому селектору.

Если вы передаете объект jQuery (представляющий список элементов, то есть объект, возвращенный из предыдущего вызовав jQuery) он просто вернет этот объект (по сути это неоперация).

Если вы передадите ему элемент DOM, он вернет список jQuery, содержащий только этот элемент (так что вы можете применять методы jQuery кэтот элемент).Это то, что происходит с $(document).ready() - вы передаете фабричной функции элемент DOM «document», она возвращает объект jQuery, представляющий этот элемент, и вы используете метод ready () этого объекта, чтобы добавить функцию обработки события в событие readyиз всех элементов DOM в списке (в данном случае только один, document).

Если вы передадите ему функцию, это просто сокращение для «запустите это, когда все готово для вас»для этого ", поэтому $(function() { ... }); эквивалентно $(document).ready(function() { ... });

0 голосов
/ 23 июня 2011

Во-первых, jQuery() отличается от $(document).ready()

$() - это сокращение для jQuery()

и ...

$(function(){ ...}); является сокращением для $(document).ready(function(){ ... });

Таким образом:

jQuery(function(){ ... }) 

Будет функционировать так же, как

$(document).ready(function({ ... });

Но ...

jQuery('#foo').css("background-color", "#f00");

не будет функционировать так же, как

$(document).ready('#foo').css("background-color", "#f00");

Итак ...

jQuery() равно не так же, как $(document).ready()

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