JavaScript Bang «!» Функции против ведущей точки с запятой «;» IIFEs

Airbnd предлагает Я сделаю это:

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

Так как:

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

Взрыв позволяет мне обойти грамматические правила языка:

// Evaluated in Chromium 34 console.
function(){}(); // => SyntaxError: Unexpected token (
!function(){}(); // => true

И при объединении других модулей удар, кажется, делает свое дело:

!function(){}();function(){}(); // => SyntaxError: Unexpected token (
!function(){}();!function(){}(); // => true
(function(){}());!function(){}(); // => true

Однако это не кажется «безопасным», потому что, если у кого-то еще нет точки с запятой в конце его сценария:

!function(){}()!function(){}(); // => SyntaxError: Unexpected token !
(function(){}())!function(){}(); // => SyntaxError: Unexpected token !

Казалось бы, ведущая точка с запятой IIFE лучше.

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

!function(){}();(function(){}()); // => undefined
(function(){}());(function(){}()); // => undefined
!function(){}();;(function(){}()); // => undefined
(function(){}());;(function(){}()); // => undefined

Я что-то пропустил? Действительно ли допустимо использовать удар "!" функции или являются ведущей точкой с запятой ";" IIFEs действительно превосходят из-за того, как они соединяются?

Ответы на вопрос(3)

Ваш ответ на вопрос