Maison >interface Web >js tutoriel >Pourquoi les parenthèses créent-elles des fonctions anonymes encapsulées en JavaScript ?

Pourquoi les parenthèses créent-elles des fonctions anonymes encapsulées en JavaScript ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-16 10:41:11377parcourir

Why Do Parentheses Create Encapsulated Anonymous Functions in JavaScript?

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

  • Déclaration de fonction : identifiant de fonction (paramètres) { . ..>
  • Expression de fonction : (identifiant de fonction (paramètres) { ... })

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn