unção @javascript levando estrondo! sintax

Estou vendo essa sintaxe em algumas bibliotecas agora e estou me perguntando qual é o benefício. (note que estou ciente dos fechamentos e do que o código está fazendo, estou preocupado apenas com as diferenças sintáticas)

!function(){
  // do stuff
}();

Como alternativa aos mais comuns

(function(){
  // do stuff
})();

para chamar funções anônimas.

Estou me perguntando algumas coisas. Primeiro, o que está permitindo que o exemplo principal realmente funcione? Por que o estrondo é necessário para tornar esta afirmação sintaticamente correta? Me disseram também que+ funciona, e tenho certeza que alguns outros, no lugar de!

Segundo, qual é o benefício? Tudo o que posso dizer é que ele salva um único personagem, mas não consigo imaginar que seja um benefício tão grande atrair muitos adotantes. Há algum outro benefício que estou perdendo?

A única outra diferença que vejo é o valor de retorno da função auto-invocadora, mas em ambos os exemplos, não nos importamos com o valor de retorno da função, pois ela é usada apenas para criar um fechamento. Então, alguém pode me dizer por que alguém pode usar a primeira sintaxe?

questionAnswers(6)

yourAnswerToTheQuestion