#javascript
#javascript
Вопрос:
У меня есть скрипт, который содержит следующий фрагмент кода:
(function ($) {
// ...
})($);
Кто-нибудь может объяснить, как это прочитать?
Комментарии:
1.
$
это просто переменная, в вашем случае это, вероятно, основной объект jQuery.2. Просто в качестве примечания: вам, вероятно, было бы лучше использовать
(function($){...})(jQuery);
Ответ №1:
- Создайте анонимную функцию
- Пусть он принимает один аргумент, который будет вызван
$
- Немедленно вызовите функцию
- Передайте ему один аргумент, значение которого равно значению
$
во внешней области.
Если значение $
во внешней области изменяется (ему присваивается новое значение), то значение для $
во внутренней области будет защищено от изменения (поскольку это другая переменная).
Это также обеспечивает чистую область видимости для всех других переменных, объявленных внутри функции (если они используются var
должным образом).
Ответ №2:
‘$’ является допустимой переменной в JavaScript. С таким же успехом это могло быть someCrazyLongVariableName
Ответ №3:
Это отчасти противоречит цели инкапсуляции $
знака в анонимную функцию.
Это самоисполняющаяся анонимная функция, которая принимает $
в качестве аргумента.
В большинстве случаев вы используете эту разметку, чтобы избежать конфликтов библиотек js: скажите, что вы хотите использовать jQuery и prototype в своем проекте. Очень приятно, но они оба используют знак ‘$’… как это преодолеть?
// jquery code here
(function($){
alert($ === jQuery);// the $ is a shortcut to jQuery
})(jQuery);
// non-jquery code here - ex: prototype
alert($ === jQuery);// the $ is NOT a shortcut to jQuery ANYMORE
Комментарии:
1. Зависит, может
$
быть, впоследствии изменяется во внешней области … подумал, что если это jQuery, тоjQuery
вместо этого следует передать imo.
Ответ №4:
Если вы не думаете о $ в частности, извлечение создает функцию javascript и вызывает ее в одном операторе.
Я не уверен на 100%, но я предполагаю, что переменные 2 $ будут иметь другую область видимости.
Я нашел эту страницу полезной, хотя и немного подробной: —
http://www.authenticsociety.com/blog/JavaScript_DollarSign
В целом, это ничем не отличается от вызова переменной a, но его следует избегать.