При просмотре кода, написанного в Twitter Bootstrap Javascript, кажется, что они вызывают немедленно вызываемые анонимные функции следующим образом:
!function( $ ) {
...
}(window.jQuery || window.ender);
Где я традиционно видел, чтобы то же самое делалось таким образом:
(function($) {
...
})(window.jQuery || window.ender);
Первый способ кажется немного халтурным, и я не уверен, есть ли какая-то польза или причина делать это таким образом, а не вторым? Обратите внимание, что я понимаю, как это работает, я хочу понять, почему они выбрали именно этот способ.
!
должен обрабатывать, где другой код JavaScript объединяется до этого и не имеет конечной точки с запятой. Нет большой разницы. Я бы использовал то, что вам было удобнее. Возможно, вам стоит что-то бросить в начале вашего примера, чтобы избежать ...
var lol = function() {
alert(arguments[0]);
}
(function() {
// Irrelevant.
})();
jsFiddle .
Бросок в ведущей ;
, и она работает ...
jsFiddle .
... или !
, как Twitter Bootstrap ...
jsFiddle .
Они оба способа преодолеть неоднозначность в грамматике. Ни один не более "хакерский", чем другой. Это просто выбор стиля.
Вы также можете сделать это:
0 + function( $ ) {
// ...
} ( window.jQuery || window.ender );
Или:
parseInt(function( $ ) {
// ...
} ( window.jQuery || window.ender ) );
Вместо шага оценки !undefined
вы также можете использовать оператор void
для устранения неоднозначности:
void function($) {
...
}(window.jQuery || window.ender);
имеет своего рода качество С; -)