web-dev-qa-db-fra.com

JavaScript plus signe devant le nom de la fonction

Je cherchais des infos sur les fonctions auto-invitantes, et quelque part je suis tombé sur cette notation:

+function(){}

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

826
jOpacic

Il oblige l'analyseur à traiter la partie suivant le + comme une expression. Ceci est généralement utilisé pour les fonctions appelées immédiatement, par exemple:

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

Sans le + là, si l'analyseur est dans un état dans lequel il attend une instruction (qui peut être une expression ou plusieurs instructions non-d'expression), Word function ressemble au début d'une fonction - déclaration plutôt qu'une fonction expression et ainsi le () le suivant (ceux situés à la fin de la ligne ci-dessus) constituerait une erreur de syntaxe (de même que absense d'un nom, dans cet exemple). Avec le +, cela 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 appelée, donc les parenthèses sont valides.

+ n'est qu'une des options. Il peut également s'agir de -, !, ~, ou de n'importe quel autre opérateur unaire. Alternativement, vous pouvez utiliser des parenthèses (ceci est plus courant, mais ni plus ni moins correctes syntaxiquement):

(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());
1291
T.J. Crowder

Filiale à la réponse de @ TJCrowder, + est généralement utilisé pour forcer la transposition numérique d'une valeur comme l'explique cette SO réponse . Dans ce cas, il est appelé "opérateur unaire plus" (pour faciliter la recherche sur Google).

var num = +variant;

Donc, 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 en théorie, l'EJI pourrait l'utiliser pour compiler la fonction en tant que fonction uniquement numérique, etc. Cependant, pour éviter que le unaire ne 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"; })());
89
Phil H

Donc, la réponse courte est que cela 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 renvoyée ne vous intéresse même pas à l'aide de l'opérateur void:

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

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

55
Ja͢ck