La syntaxe des fonctions anonymes encapsulées
En JavaScript, les fonctions anonymes encapsulées sont créées en plaçant une fonction entre parenthèses et en l'exécutant immédiatement :
(function(){ // code here })();
Cette syntaxe est utilisée pour éviter d'encombrer la portée globale avec des variables et fonctions.
Pourquoi cela fonctionne : (function(){})();
Lorsque des parenthèses entourent une déclaration de fonction, le résultat est évalué comme une expression de fonction. Les expressions de fonction autorisent les noms facultatifs, cette expression peut donc s'exécuter sans nom.
Pourquoi cela ne fonctionne pas : function(){}();
Activé d'un autre côté, lorsqu'il n'y a pas de parenthèses, JavaScript l'analyse comme une déclaration de fonction. Les déclarations de fonction nécessitent un identifiant de nom, qui est manquant dans ce cas.
Déclaration de fonction vs expression
Les expressions de fonction peuvent être nommé ou sans nom, tandis que les déclarations de fonction doivent avoir un nom.
Parenthèses et contexte
Les parenthèses indiquent que le code ci-joint est une expression. Qu'il s'agisse d'une déclaration de fonction ou d'une expression dépend du contexte. Les déclarations de fonction peuvent apparaître dans la portée globale ou dans le corps d'une autre fonction, tandis que les expressions de fonction ne peuvent apparaître que dans des expressions.
Exemple d'ambiguïté
0, function foo() {} // Function Expression function foo() {} // Function Declaration
Dans cet exemple , l'analyseur détermine s'il s'agit d'une déclaration de fonction ou d'une expression basée sur le contexte. L'expression peut apparaître dans des expressions, tandis que la déclaration ne peut apparaître qu'à des emplacements spécifiques.
Pourquoi les fonctions dans les blocs doivent être évitées
Les fonctions à l'intérieur des blocs peuvent conduire à un comportement inattendu en raison de problèmes de portée variable. Par exemple :
if (true) { function foo() { alert('true'); } } else { function foo() { alert('false!'); } } foo(); // true? false? why?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!