2013-06-26 1 views
3

Я заметил, что в некоторых местах код jQuery завернут в функцию самозапуска, как показано ниже. Почему это делается, в каких случаях это полезно и в каких случаях является ненужным шаблоном?Функция самозапуска jQuery

function($) { 
    ... 
}(jQuery); 
+0

Вам не нужна глобальная переменная '' 'для представления' jQuery', у нее много дубликатов и ресурсов. –

+0

Функции создают переменную область. Теперь у вашей функции есть область $. Вот и все. –

+0

... но это необязательно, если ваш код помещен в обработчик '.ready()', так как вы можете просто выполнить jQuery (document) .ready (function ($) {...}); 'или более короткий 'jQuery (function ($) {...});' –

ответ

8

Короткий ответ: Для того, чтобы предотвратить конфликты имен переменных. Это не всегда необходимо, но хорошая практика, чтобы создать коллизионный многоразовый код.

Длинный ответ: В javascript символ $ - это еще одна переменная. jQuery использует его, потому что это хорошая стенография вместо того, чтобы каждый раз вводить jQuery, но так же может быть и любой другой код (включая другие библиотеки).

Чтобы предотвратить конфликт с другими видами использования переменной в той же области (в данном случае $ в «глобальной» области), общий код, который должен быть завернут в функцию самозапускания с помощью «без конфликтов», переменные, переданные в качестве параметров функции. Затем создается новая область, в которой ваша переменная не будет мешать другим применениям этой переменной. Таким образом, вы можете передать полную именованную переменную &, используя ее с любым именем, которое вы хотите в анонимной функции.

Таким образом, при создании конфликтными повторно используемого кода это хорошая практика, чтобы использовать эту методику:

(function($) { 
    ... 
})(jQuery); 

Вдоль этих линий вы увидите следующий формат:

(function($, window, undefined) { 
    ... 
})(jQuery, window); 

В этом случае undefined просто используется для удобочитаемости, указывающего, что никакие аргументы не передаются функции.

0

В области видимости функции $ локальная переменная, которая не конфликтует ни с одним другим глобальным $.

3

В случае, если вы хотите, чтобы избежать конфликта в отношении использования $

function($) { 
    ... 
}(jQuery); 

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

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

Ссылка :http://learn.jquery.com/plugins/basic-plugin-creation/