Je cherchais des informations sur les fonctions immédiatement appelées, et quelque part je suis tombé sur cette notation:
+function(){console.log("Something.")}()
Quelqu'un peut-il m'expliquer ce que le +
signe devant la fonction signifie / fait?
Réponses:
Il force l'analyseur à traiter la partie suivant l'
+
expression comme une expression. Ceci est généralement utilisé pour les fonctions qui sont appelées immédiatement, par exemple:Sans le
+
là, si l'analyseur est dans un état où il attend une instruction (qui peut être une expression ou plusieurs instructions de non-expression), le motfunction
ressemble au début d'une déclaration de fonction plutôt qu'à une expression de fonction et donc le()
suivant (ceux à la fin de la ligne ci-dessus) serait une erreur de syntaxe (tout comme l'absence d'un nom, dans cet exemple). Avec le+
, il en fait une expression de fonction, ce qui signifie que le nom est facultatif et qu'il en résulte une référence à la fonction, qui peut être invoquée, de sorte que les parenthèses sont valides.+
n'est qu'une des options. Il peut aussi être-
,!
,~
ou à peu près tout autre opérateur unaire. Alternativement, vous pouvez utiliser des parenthèses (c'est plus courant, mais ni plus ni moins syntaxiquement correct):la source
Subsidiaire à la réponse de @ TJCrowder,
+
est généralement utilisé pour forcer la conversion numérique d'une valeur comme l'explique cette réponse SO . Dans ce cas, il est appelé «opérateur unaire plus» (pour faciliter la recherche sur Google).Ainsi, devant une fonction, cela peut être un moyen de forcer le résultat de la fonction à être interprété comme un nombre. Je doute que cela se produise encore, mais théoriquement, le JIT pourrait l'utiliser pour compiler la fonction en tant que fonction uniquement numérique, etc. Cependant, pour éviter que l'unaire plus soit une concaténation lorsqu'il est utilisé dans une expression plus grande, vous auriez besoin de parenthèses:
la source
(+function() { ... })()
notation ne peut jamais s'exécuter sans erreurs (à part le fait que cela ne répond pas à la question).3++function...
qui conduit à ce qui n'est pas le même.+function...
soit inutile en soi. Le même résultat peut être obtenu,blah + function( ){ ... }( );
ce qui éliminerait le besoin de supports d'emballage.Donc, la réponse courte est qu'elle empêche une erreur de syntaxe, en utilisant les résultats de la fonction d'une manière ou d'une autre.
Vous pouvez également indiquer au moteur que la valeur de retour ne vous intéresse même pas en utilisant l'
void
opérateur:Bien sûr, mettre des accolades autour de tout cela sert également cet objectif.
la source