! function () {} () vs (function () {}) () - PullRequest
29 голосов
/ 29 ноября 2011

При просмотре некоторого кода, написанного в JavaScript Bootstrap Javascript, похоже, что они вызывают немедленно вызванные анонимные функции, например:

!function( $ ) {

     ...

}(window.jQuery || window.ender);

Там, где я традиционно видел, то же самое совершалось так:

(function($) {

    ...

})(window.jQuery || window.ender);

Первый способ кажется немного хакерским, и я не уверен, есть ли какая-то выгода или причина делать это таким образом, а не вторым? Обратите внимание, что я понимаю, как это работает, я хочу понять, почему они выбрали именно этот способ.

Ответы [ 4 ]

19 голосов
/ 29 ноября 2011
  • На один символ меньше при уменьшении.
  • ! должен обрабатывать, где другой код JavaScript объединяется до этого и не имеет конечной точки с запятой.

Нет большой разницы.Я бы использовал то, что вам было удобнееВозможно, вам стоит что-то бросить в начале вашего примера, чтобы избежать ...

base.js

var lol = function() {
   alert(arguments[0]);
}

im-concat-to-base.js

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

jsFiddle .

Бросок в ведущем ; и она работает ...

jsFiddle .

...или !, как Twitter Bootstrap ...

jsFiddle .

14 голосов
/ 29 ноября 2011

Они оба способа преодолеть неоднозначность в грамматике. Ни один не более "хакерский", чем другой. Это просто выбор стиля.

Вы также можете сделать это:

0 + function( $ ) {
  // ...
} ( window.jQuery || window.ender );

Или:

parseInt(function( $ ) {
  // ...
} ( window.jQuery || window.ender ) );
2 голосов
/ 25 апреля 2013

Вместо шага оценки !undefined вы также можете использовать оператор void для удаления неоднозначности:

void function($) {
     ...
}(window.jQuery || window.ender);

Имеет своего рода качество С; -)

0 голосов
/ 05 сентября 2016

Один ответ, который я еще не видел, состоит в том, что он избегает заключать в скобки всю вашу функцию.Помимо эстетических соображений, это может быть плюсом для некоторых редакторов, которые используют скобки для определения уровня отступа строки.

...