! function () {} () vs (function () {}) ()
-
25-10-2019 - |
Вопрос
Просмотрев некоторые коды, написанные в 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.
})();
Бросить в лидинг ;
И она работает ...
... или !
Как начальная загрузка в Твиттере ...
Другие советы
Они оба способа преодолеть двусмысленность в грамматике. Ни один из них не более «хакерский», чем другой. Это просто выбор стиля.
Вы также можете сделать это:
0 + function( $ ) {
// ...
} ( window.jQuery || window.ender );
Или же:
parseInt(function( $ ) {
// ...
} ( window.jQuery || window.ender ) );
Вместо этапа оценки !undefined
Вы также можете использовать void
оператор для удаления двусмысленности:
void function($) {
...
}(window.jQuery || window.ender);
Имеет какое-то качество C ;-)
Один ответ, который я еще не видел, заключается в том, что он избегает окружения всей вашей функции с помощью скобок. Помимо эстетических соображений, это может быть плюсом для некоторых редакторов, которые используют скобки для определения уровня отступления линии.