JavaScript signe + devant le nom de la fonction

j'ai cherché des informations sur les fonctions d'auto-invocation, et quelque part je suis tombé sur cette notation:

+function(){}

quelqu'un peut-il m'expliquer ce que signifie/fait le signe + devant la fonction?

787
demandé sur chŝdk 2012-11-12 14:06:23

3 réponses

oblige l'analyseur à traiter la partie qui suit le + comme une expression. Ceci est habituellement utilisé pour les fonctions qui sont invoquées immédiatement, par exemple:

+function() { console.log("Foo!"); }();

sans le + là, si l'analyseur est dans un état où il attend une déclaration (qui peut être une expression ou plusieurs déclarations de non-expression), le mot function ressemble au début d'une fonction déclaration plutôt que la fonction expression et donc () à la suite (à la fin de la ligne ci-dessus) serait une erreur de syntaxe (comme l'absense d'un nom, dans cet exemple). avec le + , il en fait une expression de fonction, ce qui signifie que le nom est facultatif et qui résulte en une référence à la fonction, qui peut être invoquée, de sorte que les parenthèses sont valides.

+ est juste une des options. Il peut aussi être - , ! , ~ , ou à peu près n'importe quel autre opérateur. Alternativement, vous pouvez utiliser des parenthèses (c'est plus commun, mais ni plus ni moins correct syntaxiquement):

(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());
1243
répondu T.J. Crowder 2015-07-28 06:32:06

filiale de la réponse de @TJCrowder, + est habituellement utilisé pour forcer la coulée numérique d'une valeur comme cette réponse explique . Dans ce cas, il est appelé "unary plus operator" (pour faciliter la recherche sur Google).

var num = +variant;

Donc en face d'une fonction, il peut être un moyen de forcer le résultat de la fonction à être interprétée comme un nombre. Je doute que cela se produise encore, mais théoriquement le JIT pourrait utiliser cela pour compiler la fonction comme un fonction numérique uniquement, etc. Cependant, pour éviter que le unary plus soit une concaténation lorsqu'il est utilisé dans une expression plus large, vous aurez besoin de parenthèses:

blah + (+(function(){ var scope; return "4"; })());
85
répondu Phil H 2017-05-23 11:47:22

Donc, la réponse courte est qu'il 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 vous n'êtes même pas intéressé par la valeur de retour en utilisant l'opérateur void :

void function() { console.log("Foo!"); }();

bien sûr, mettre des bretelles autour du tout sert aussi à cette fin.

49
répondu Ja͢ck 2012-11-16 16:45:29