Почему я должен ссылаться на 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-машинах.