Описание функций jQuery и Twitter Bootstrap - PullRequest
2 голосов
/ 25 марта 2012

Если вы видите файл bootstrap application.js, который существует во всех документах, вы заметите следующий код:

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

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

спасибо

Ответы [ 3 ]

6 голосов
/ 25 марта 2012

Это автоматически выполняемая функция:

!function(x){}(y)

x - это параметр функции, а y - это параметр, который вы передаете в авто-вызове этой функции,

! - это всего лишь наглядное руководство, которое сразу показывает, что функция выполняется самостоятельно.Другая распространенная практика - вместо этого заключать в скобки.(function(){}())

3 голосов
/ 01 апреля 2013

Это потому что

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

недопустимо в синтаксисе, но

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

действителен.

Теперь вопрос, почему первый случай недействителен?

Давайте сначала посмотрим на это. И анонимные функции, и именованные функции могут рассматриваться как выражение , например,

0 + function(y) { return y; } (1);
0 + function x(y) { return y; } (1);

оба действительны.

Тогда рассмотрим эту ситуацию, это утверждение содержит одно выражение

function x(y) {
    return y;
}
(1);

"Это неправильно!" Можете ли вы сказать, что, поскольку вы знаете, что это на самом деле одно определение функции и одно выражение с одним выражением (1).

Правда в том, что эти коды неоднозначны для синтаксического анализатора, потому что он может быть разрешен либо как одна функция и одно выражение в скобках, либо как вызов функции. Чтобы избежать такого рода двусмысленности, Javascript регламентирует, что , если function встречается как первый токен оператора, оператор должен быть определением функции . Так что function($) {} (window.jQuery); недопустимо в синтаксисе, потому что это недопустимое определение функции. Но предложите ! или даже такой код действителен

0 + function x(y) {
    return y;
}
(1);

Это один оператор с двоичным плюсом, чья rhs - это вызов функции внутри него.

2 голосов
/ 25 марта 2012

Это гарантирует, что в коде внутри функции вы сможете использовать сокращенный способ доступа к jQuery. В некоторых средах (например, Wordpress) они не имеют сокращенной «$», чтобы избежать конфликта с другими библиотеками javascript. Используя этот способ, вы можете использовать простую конструкцию $ в любой среде (если определен window.jQuery).

Итак, в основном она создает функцию и немедленно вызывает ее, передавая window.jQuery. Это означает, что код в функции увидит переменную $ local, и ей присвоено window.jQuery.

...