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?