Может ли 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, обеспечивая отсутствие конфликтов на протяжении всей функции.

Другие вопросы по тегам