Почему я должен ссылаться на jQuery в автономной функции?
(function ($, undefined) {
. . .
})(jQuery);
Я вижу это везде, но я не понимаю, почему мы отправляем jQuery в качестве параметра в автономной функции. jQuery уже ссылается. Кроме того, почему мы определяем undefined
как параметр?
Ответы
Ответ 1
Передача $
анонимной функции гарантирует, что пространство имен защищено (т.е. не конфликтует с другими библиотеками, которые также используют ярлык $
).
Зачастую undefined
передается функции, чтобы гарантировать истинность переменной undefined
. Например, рассмотрим следующий код exerpt:
undefined = '123';
if(myVar == undefined)
{
// Will only ever execute if myVar == '123'
}
Как отмечено в комментариях, хотя, если вы не пишете плагин или некоторые такие, использование jQuery(function($) { })
, вероятно, является лучшим подходом, поскольку он защищает ярлык $
, а также предоставляет событие DOMReady, что означает, что код меньше для достижения того же результата.
Если вам нужно проверить undefined
, вы также можете рассмотреть возможность использования $.noop()
.
Ответ 2
Возможно, что $
или undefined
могут иметь свои значения, измененные последующим кодом, например. если вы смешиваете несколько JS-библиотек или используете несколько версий библиотеки. Захватив вашу собственную копию $
и undefined
, вы защитите ее.
Ответ 3
(function ($, undefined) {
. . .
})(jQuery);
с этим вы будете уверены, что $является jQuery внутри функции (любой jQuery находится в вашем script).
Это не мешает вам переписывать переменную jQuery, поэтому используйте ее только в том случае, если она вам действительно нужна (или вы создаете плагин и распространяете плагин jquery).
Что касается undefined, он будет принудительно undefined быть undefined, поскольку undefined может быть перезаписан в некоторых js-машинах.