Какова цель этого? (function ($) {// код функции здесь}) (jQuery); - PullRequest
14 голосов
/ 29 ноября 2011

Я отлаживаю чужой код JavaScript, и большая часть кода выглядит так:

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

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

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

Ответы [ 4 ]

16 голосов
/ 29 ноября 2011
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"
13 голосов
/ 29 ноября 2011

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

3 голосов
/ 08 февраля 2012

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

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

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

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

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

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

0 голосов
/ 29 ноября 2011

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

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

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