Airbnd suggests Je fais ceci:JavaScript Bang "!" Fonctions vs Semi-Colon "" IIFEs
!function() {
// ...
}();
Parce que:
Cela garantit que si un module malformé oublie d'inclure un point-virgule finale il n'y a pas d'erreurs dans la production lorsque les scripts sont concaténés .
Le coup me permet de travailler autour des règles de grammaire de la langue:
// Evaluated in Chromium 34 console.
function(){}(); // => SyntaxError: Unexpected token (
!function(){}(); // => true
Et quand concaténer autres modules le bang semble faire l'affaire:
!function(){}();function(){}(); // => SyntaxError: Unexpected token (
!function(){}();!function(){}(); // => true
(function(){}());!function(){}(); // => true
Cependant, il ne semble en fait être "sûr", parce que si quelqu'un d'autre n'a pas de point-virgule à la fin de son script:
!function(){}()!function(){}(); // => SyntaxError: Unexpected token !
(function(){}())!function(){}(); // => SyntaxError: Unexpected token !
Il semblerait qu'un demi-colon IIFE est meilleur.
;(function() {
// ...
}());
!function(){}();(function(){}()); // => undefined
(function(){}());(function(){}()); // => undefined
!function(){}();;(function(){}()); // => undefined
(function(){}());;(function(){}()); // => undefined
Quelque chose me manque? Est-il vraiment acceptable d'utiliser Bang?! " fonctions ou dirigent un point-virgule ";" Les IIFE sont-ils vraiment supérieurs en raison de leur concaténation?
Les IIFE sont "_no pas mieux que les fonctions bang ..." "Hein? IIFE et "fonctions _bang" ne sont pas vraiment liés. Les IIFE sont une construction qui empêche de polluer la portée globale. Vous pouvez placer un '!' Devant une déclaration de fonction pour le faire évaluer en tant qu'expression de fonction ... Aussi, qu'est-ce que le diable fait "_un point-virgule en tête est le dealbreaker_"? – jahroy
1. Dans le dernier paragraphe de ma question, j'ai fait l'hypothèse erronée que l'on ne pouvait faire précéder un IIFE qu'avec un point-virgule. Cependant, j'ai réalisé par la suite que je pourrais tout aussi bien ajouter une fonction bang avec un. 2. Dans ce cas, une fonction bang OU un IIFE pourrait être utilisé pour définir un module. 3. Sans un point-virgule, vous obtiendrez une erreur de syntaxe. Je vais mettre à jour cet article pour clarifier cela. – Jackson