JavaScript Bang "!" Funções vs Leading Semi-Colon ";" IIFEs

Airbnd sugere Eu faço isso:

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

Porque:

Isso garante que, se um módulo malformado esquecer de incluir um ponto e vírgula final, não haverá erros na produção quando os scripts forem concatenados.

O estrondo permite-me contornar as regras gramaticais da linguagem:

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

E ao concatenar outros módulos, o estrondo parece fazer o truque:

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

No entanto, não parece realmente "seguro", porque se alguém não tiver um ponto e vírgula no final do script:

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

Parece que um líder de ponto e vírgula IIFE é melhor.

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

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

Estou esquecendo de algo? É realmente aceitável usar bang "!" funciona ou lidera ponto e vírgula ";" IIFEs verdadeiramente superiores por causa da maneira como concatenam?

questionAnswers(3)

yourAnswerToTheQuestion