JQuery newbie: что делает jQuery (функция ($) {...})?

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

Как насчет

jQuery(function($) {

 });

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

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

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

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

Ответ 1

jQuery(function($) {

});

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

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

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

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

Ответ 2

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

Ответ 3

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

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


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

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

ИЗМЕНИТЬ:

Я почти прав, но здесь он прямо со своего сайта:

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

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

Ответ 4

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

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

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

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

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

Ответ 5

Во-первых, 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()