вызов функции с ‘$’ в качестве параметра

#javascript

#javascript

Вопрос:

У меня есть скрипт, который содержит следующий фрагмент кода:

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

Кто-нибудь может объяснить, как это прочитать?

Комментарии:

1. $ это просто переменная, в вашем случае это, вероятно, основной объект jQuery.

2. Просто в качестве примечания: вам, вероятно, было бы лучше использовать (function($){...})(jQuery);

Ответ №1:

  1. Создайте анонимную функцию
  2. Пусть он принимает один аргумент, который будет вызван $
  3. Немедленно вызовите функцию
  4. Передайте ему один аргумент, значение которого равно значению $ во внешней области.

Если значение $ во внешней области изменяется (ему присваивается новое значение), то значение для $ во внутренней области будет защищено от изменения (поскольку это другая переменная).

Это также обеспечивает чистую область видимости для всех других переменных, объявленных внутри функции (если они используются 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, но его следует избегать.