Может ли jQuery $ мешать другим библиотекам?
Я читал, что если вы сделаете это, вы можете избежать конфликтов с другими библиотеками, которые используют $
условное обозначение.
(function($) {
// jQuery code
})(jQuery)
Может кто-нибудь объяснить мне, пожалуйста?
5 ответов
Вы определяете анонимную функцию с аргументом $
, Затем вы сразу же позвоните с jQuery
объект (имя которого, скорее всего, достаточно явное, чтобы не вступать в противоречие с именем какого-либо другого объекта библиотеки).
Таким образом, в рамках анонимной функции (где будет весь ваш код jQuery), $
будет ссылаться на jQuery
объект. И, следовательно, все довольны: ваш код использует удобную стенографию $
и код позже можно использовать $
для своего бизнеса.
Вы также должны использовать jQuery.noconflict
,
Обычно, когда вы используете jQuery, он определяет глобальную функцию с именем $
, JQuery также запоминает предыдущее значение $
- как глобальный $
функция определяется другой библиотекой.
Когда вы звоните noconflict
jQuery восстанавливает предыдущее (запомненное) значение $
, Но теперь вы не можете использовать $
использовать jQuery - вы можете использовать только имя функции jQuery
, но это более многословно. Вот тут-то и появляется код, который вы упоминаете в своем вопросе.
Этот код позволяет вам использовать $
вызвать jQuery в области действия определяемой вами анонимной функции, не заменяя ее значением глобальной $
, Функции создают отдельную область видимости или пространство имен для своих локальных переменных и параметров. Код, который вы разместили, эквивалентен:
function init() {
var $ = window.jQuery;
// do stuff with $
}
init();
Общий ярлык для регистрации функции инициализации в качестве обратного вызова, который вызывается, когда DOM готов, передает его в качестве параметра $
:
$(function() {
// code
});
Чтобы избежать необходимости вложения двух анонимных функций, когда необходимо предотвратить конфликты библиотек, функция jQuery будет передавать себя в качестве параметра для этого обратного вызова, поэтому вы можете сделать это:
jQuery(function($) {
// $ is jQuery here
});
Другие библиотеки могут использовать $
для других целей.
Вам все еще следует позвонить
jQuery.noConflict();
Вы можете прочитать больше здесь: http://api.jquery.com/jQuery.noConflict/
$
Представляет объект jQuery. Другие библиотеки также используют $
представлять их объект. Так что, если вы загружаете плагин jQuery, он может попытаться изменить неправильный $
объект.
Ты можешь использовать jQuery.noConflict()
чтобы обойти это: http://api.jquery.com/jQuery.noConflict/
Да, используя $
может мешать работе других библиотек (например, Prototype).
Ваш фрагмент кода определяет непосредственную функцию, затем вызывает ее, передавая jQuery
в качестве параметра. (jQuery
является объектом верхнего уровня jQuery, как $
когда нет конфликта.)
jQuery
связан с функцией $
параметр. Функции JavaScript создают свою собственную область видимости, поэтому параметры функции (и локальные объекты, объявленные с var
) переопределит любые глобальные переменные с таким же именем.
Единственное значение $
функция "увидит" это параметр, связанный с jQuery
, обеспечивая отсутствие конфликтов на протяжении всей функции.