844 votes

JavaScript signe + devant le nom de la fonction

J'ai été à la recherche d'infos à propos de l'auto-invocation de fonctions, et quelque part je suis tombé sur cette notation:

+function(){}

Quelqu'un peut-il m'expliquer ce que l' + connectez-vous en face de la fonction/est-ce?

1304voto

T.J. Crowder Points 285826

C'forces de l'analyseur pour traiter la partie à la suite de l' + comme une expression. Il est généralement utilisé pour des fonctions qui sont appelées immédiatement, par exemple:

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

Sans l' + il y a, si l'analyseur est dans un état où il attend une déclaration (qui peut être une expression ou plusieurs non-expression des déclarations), le mot function ressemble au début d'une fonction de la déclaration plutôt que d'une fonction d'expression et donc de l' () suite (ceux à la fin de la ligne ci-dessus) serait une erreur de syntaxe (comme l'absense d'un nom, dans cet exemple). Avec l' +, 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é, de sorte que les parenthèses sont valables.

+ est juste l'une des options. Il peut également être -, !, ~, ou de tout autre opérateur unaire. Alternativement, vous pouvez utiliser les parenthèses (ce qui est plus commun, mais ni plus ni moins corriger la syntaxe):

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

92voto

Phil H Points 10133

Filiale à @TJCrowder réponse, + est généralement utilisé pour la force numérique de la coulée de valeur que ce, AFIN de répondre explique. Dans ce cas il est appelé le " unaire plus de l'opérateur (pour la facilité de googler).

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 qu'il se passe encore, mais en théorie, l'équipe pourrait l'utiliser pour compiler la fonction numérique de la seule fonction etc. Toutefois, afin de prévenir les unaire en plus d'être une concaténation lorsqu'utilisé dans une expression plus grande, vous avez besoin des parenthèses:

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

57voto

Jack Points 88446

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 demander le moteur que vous n'êtes pas intéressé par la valeur de retour à l'aide de la void opérateur:

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

Bien sûr, de mettre des accolades autour de le tout sert également de cet objectif.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X