Может ли jQuery $ мешать другим библиотекам? - PullRequest
2 голосов
/ 26 октября 2011

Я прочитал, что если вы сделаете это, вы сможете избежать конфликтов с другими библиотеками, которые используют символ $.

(function($) {
  // jQuery code  
})(jQuery)

Может кто-нибудь объяснить мне, пожалуйста?

Ответы [ 5 ]

4 голосов
/ 26 октября 2011

Вы определяете анонимную функцию с аргументом с именем $.Затем вы немедленно вызываете его с помощью объекта jQuery (имя которого более чем достаточно очевидно, чтобы не вступать в конфликт с именем какого-либо другого объекта библиотеки).

Таким образом, в рамках анонимной функции (где все вашиКод jQuery будет), $ будет ссылаться на объект jQuery.И, следовательно, все довольны: ваш код использует удобную стенографию $, а код позже может использовать $ для своего бизнеса.

1 голос
/ 26 октября 2011

Вы также должны использовать 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
});
1 голос
/ 26 октября 2011

Другие библиотеки могут использовать $ для других целей.

Вы все равно должны позвонить

jQuery.noConflict();

Вы можете прочитать больше здесь: http://api.jquery.com/jQuery.noConflict/

0 голосов
/ 26 октября 2011

Да, использование $ может создавать помехи другим библиотекам (например, Prototype).

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

jQuery привязан к параметру $ функции.Функции JavaScript создают свои собственные области видимости, поэтому параметры функции (и локальные объекты, объявленные с var) будут «переопределять» любые глобальные переменные с таким же именем.

Единственное значение $, которое будет отображать функция"это параметр, связанный с jQuery, гарантирующий отсутствие конфликтов в течение всей функции.

0 голосов
/ 26 октября 2011

$ Представляет объект jQuery. Другие библиотеки также используют $ для представления своего объекта. Поэтому, если вы загружаете плагин jQuery, он может попытаться изменить неправильный $ объект.

Вы можете использовать jQuery.noConflict(), чтобы обойти это: http://api.jquery.com/jQuery.noConflict/

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