!function(){ }() vs (function(){ })()

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

!function( $ ) {

     ...

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

Где я традиционно видел, чтобы то же самое делалось таким образом:

(function($) {

    ...

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

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

29
задан Tim Hallyburton 17 March 2015 в 20:18
поделиться

3 ответа

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

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

base.js

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

im-concat-to-base.js

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

jsFiddle .

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

jsFiddle .

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

jsFiddle .

19
ответ дан 28 November 2019 в 01:56
поделиться

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

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

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

Или:

parseInt(function( $ ) {
  // ...
} ( window.jQuery || window.ender ) );
14
ответ дан 28 November 2019 в 01:56
поделиться

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

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

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

2
ответ дан 28 November 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: