Какова цель этого? (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