Question Signe JavaScript plus devant le nom de la fonction


J'ai regardé des informations sur les fonctions auto-invoquant, et quelque part je suis tombé sur cette notation:

+function(){}

Quelqu'un peut-il m'expliquer ce que le + signe en face de la fonction signifie / fait?


777
2017-11-12 10:06


origine


Réponses:


Cela force l'analyseur à traiter la pièce après le + comme une expression. Ceci est généralement 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 qu'une fonction expression et ainsi le () le suivant (ceux qui se trouvent à la fin de la ligne ci-dessus) serait une erreur de syntaxe (tout comme l'absence d'un nom, dans cet exemple). Avec la +, il en fait une expression de fonction, ce qui signifie que le nom est optionnel 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.

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

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

1229
2017-11-12 10:07



Filiale de la réponse de @ TJCrowder, + est généralement utilisé pour forcer la coulée numérique d'une valeur comme cette réponse SO explique. Dans ce cas, il est appelé «opérateur unaire plus» (pour faciliter le googling).

var num = +variant;

Ainsi, devant une fonction, il peut être un moyen de forcer l'interprétation du résultat de la fonction sous forme de nombre. Je doute que cela se produise encore, mais théoriquement le JIT pourrait utiliser cela pour compiler la fonction comme une fonction numérique uniquement. Cependant, pour éviter que le plus unaire soit une concaténation lorsqu'il est utilisé dans une expression plus grande, vous auriez besoin de parenthèses:

blah + (+(function(){ var scope; return "4"; })());

84
2017-11-12 10:54



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 vous n'êtes même pas intéressé par la valeur de retour en utilisant le void opérateur:

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

Bien sûr, mettre des accolades autour de tout cela sert également ce but.


47
2017-11-16 16:45