Le point d'exclamation énigmatique dans les expressions de fonction JavaScript
Dans le domaine du code JavaScript, vous avez peut-être rencontré un spectacle curieux : un point d'exclamation précédant une déclaration de fonction. Cela semble avoir une signification profonde qui modifie la nature même de la fonction.
Le point d'exclamation, !, transforme une déclaration de fonction en une expression de fonction. Cela signifie que la fonction est désormais traitée comme une valeur qui peut être assignée à une variable, passée en argument ou même renvoyée par une autre fonction.
Pour comprendre l'implication, considérons le code suivant :
function foo() {}
Il s'agit d'une déclaration de fonction standard, qui définit simplement la fonction mais ne l'invoque pas. Pour exécuter réellement la fonction, vous l'appelleriez comme ceci :
foo()
Maintenant, introduisons le point d'exclamation :
!function foo() {}();
Cet ajout apparemment inoffensif change la donne. Le point d'exclamation transforme la déclaration de fonction en une expression, qui peut désormais être immédiatement invoquée en ajoutant des parenthèses. La priorité des parenthèses est supérieure à celle du point d'exclamation, donc le code s'exécute comme :
(function foo() {})()
Cela accomplit essentiellement la même tâche que l'invocation explicite dans l'exemple précédent. Cependant, il offre un avantage subtil : il économise un octet par expression de fonction.
De plus, le point d'exclamation sert également à un autre objectif. Cela force l'expression à renvoyer une valeur booléenne basée sur la valeur de retour de la fonction. Cependant, dans le cas d'expressions de fonction immédiatement invoquées (IIFE), la valeur de retour est généralement indéfinie, ce qui rend le résultat de l'expression true. Cette valeur booléenne n'est généralement pas utilisée, mais elle constitue néanmoins un curieux effet secondaire de la présence du point d'exclamation.
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!