Вопрос

Просмотрев некоторые коды, написанные в JavaScript в Twitter Bootstrap, похоже, что они звонят сразу же призваны анонимные функции, подобные этим:

!function( $ ) {

     ...

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

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

(function($) {

    ...

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

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

Это было полезно?

Решение

  • Один меньший характер при министерстве.
  • А ! Следует обрабатывать, где другой код JavaScript объединяется до этого, и у него нет прицельного полуколона.

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

base.js

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

im-concat-to-base.js

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

jsfiddle.

Бросить в лидинг ; И она работает ...

jsfiddle.

... или ! Как начальная загрузка в Твиттере ...

jsfiddle.

Другие советы

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

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

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

Или же:

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

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

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

Имеет какое-то качество C ;-)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top