Какова цель этого? (function ($) {//здесь код функции}) (jQuery);

Я отлаживаю код другого кода JavaScript, и большая часть кода завершается следующим образом:

(function ($) {
    //majority of code here...
})(jQuery);

Что происходит с ($) и (jQuery)? Меня не учили так писать и не видели. Какова их цель?

Кроме того, нет document.ready, но я предполагаю, что это потому, что код выполняется сразу после его чтения (); в конце?

Ответы

Ответ 1

var $ = "some value we don't care about";

 // v=====normal plain old function
(function ($) {
 //        ^=======receives jQuery object as the $ parameter

    //majority of code here, where $ === jQuery...

    $('.myclass').do().crazy().things();


})(jQuery);
 //  ^=======immediately invoked, and passed the jQuery object


 // out here, $ is undisturbed
alert( $ ); // "some value we don't care about"

Ответ 2

Это полезно, когда вам нужно/нужно использовать jQuery.noConflict(), а глобальное имя $ не является псевдонимом для jQuery, Код, который вы опубликовали, позволяет использовать более короткий $ для обозначения jQuery только внутри анонимной функции, без $, который должен быть глобальным.

Ответ 3

Просто чтобы увеличить на ответ RightSaidFred, когда я впервые увидел синтаксис ()(), я был немного одурманен, но это имело смысл, как только я понял, что скобки используются для определения анонимной функции, а затем для ее вызова. например:

(function (msg){alert(msg)})('hello');

... определяет функцию, а затем вызывает ее, передавая "привет" в качестве параметра.

Итак, пример в вопросе:

(function ($) {
    //majority of code here...
})(jQuery);

передает jQuery в анонимную функцию и ссылается на нее как $внутри функции, способ гарантировать, что $будет работать для jQuery, не вмешиваясь ни в что другое.

Ответ 4

Эта структура называется плагином JQuery, целью плагинов является создание структуры любой общей задачи/функции в вашем проекте, так же, как вы можете расширить свои плагины в соответствии с вашим использованием на другой странице или на той же странице. таким образом вы можете избежать повторения одного и того же кода везде.

проверить http://docs.jquery.com/Plugins/Authoring