Quel est le point d'exclamation faire avant la fonction?
!function () {}();
Son utilité est expliquée dans cette réponse: stackoverflow.com/questions/5422585/...
connexes: JavaScript signe + devant le nom de la fonction
Nous l'appeler Auto-exécution de la fonction anonyme ---
Préférable de se référer à ce qu'un Immédiatement appelé la Fonction d'Expression, que l'article plus tard, explique ("self-executing" implique la récursivité)
connexes: JavaScript signe + devant le nom de la fonction
Nous l'appeler Auto-exécution de la fonction anonyme ---
Préférable de se référer à ce qu'un Immédiatement appelé la Fonction d'Expression, que l'article plus tard, explique ("self-executing" implique la récursivité)
OriginalL'auteur Sebastian Otto | 2010-09-20
Vous devez vous connecter pour publier un commentaire.
La syntaxe JavaScript 101. Voici une déclaration de fonction:
Remarque qu'il n'y a pas de point-virgule: c'est juste une fonction déclaration. Vous auriez besoin d'une invocation,
foo()
, pour exécuter la fonction.Maintenant, lorsque nous ajoutons de l'apparence anodins point d'exclamation:
!function foo() {}
il les transforme en une expression. Il est maintenant un expression de fonction.La
!
ne suffit pas d'invoquer la fonction, bien sûr, mais nous pouvons maintenant mettre()
à la fin:!function foo() {}()
qui a une priorité plus élevée que!
et immédiatement les appels de la fonction.Donc, ce que l'auteur est en train de faire est de sauver un octet par la fonction d'expression, un moyen plus lisible de l'écriture, ce serait celui-ci:
Enfin,
!
rend l'expression renvoie la valeur true. C'est parce que par défaut, tous les IIFE retourundefined
, ce qui nous laisse avec!undefined
qui esttrue
. Pas particulièrement utile.!
retourne un booléen, nous le savons tous, mais le grand point est qu'il convertit également la fonction de déclaration d'une fonction d'expression de façon à ce que la fonction peut être immédiatement appelé sans l'enveloppant dans des parenthèses. Pas évident, et clairement l'intention de le coder.+1 C'est la seule réponse que fait montre POURQUOI vous voulez le faire, et pourquoi on le voit plus utilisée que la négation de la déclaration de résultat semble bon de souscription. L'opérateur unaire ! (aussi ~, - et +) disambiguates à partir d'une déclaration de fonction, et permet à l'parenthèses à la fin () pour appeler la fonction. C'est souvent fait pour créer une portée locale / espace de noms pour les variables lors de l'écriture de code modulaire.
Un autre avantage est que ! les causes d'un semi-colon d'insertion, il est donc impossible pour cette version pour être à tort, concaténé avec un fichier qui ne se termine pas par un ;. Si vous avez la (les) forme, il le considère comme un appel de fonction de ce qui a été défini dans le fichier précédent. Coup de chapeau à un co-travailleur de la mine.
foo = sauts de l'énoncé par l'expression de l'ambiguïté et vous pouvez simplement écrire
var foo = function(bar){}("baz");
etc.c'est moche à voir... Le long chemin de ronde n'est pas trop de temps pour choisir le point d'exclamation. De cette façon, pourrait sauver le développeur en une fraction de seconde, et des heures à comprendre pour les autres.
OriginalL'auteur Neil
La fonction:
ne retourne rien (ou non).
Parfois, nous voulons appeler une fonction à droite comme nous le créons. Vous pourriez être tenté d'essayer ceci:
mais il en résulte un
SyntaxError
.À l'aide de la
!
opérateur avant que la fonction fait être considéré comme une expression, si on peut l'appeler:Ce sera aussi de retour de la fonction booléenne à l'opposé de la valeur de retour de la fonction, dans ce cas
true
, parce que!undefined
esttrue
. Si vous voulez que la valeur de retour d'être le résultat de l'appel, puis essayez de le faire de cette façon:c'est le uniquement réponse qui explique le cas dans la question, bravo!!!
Votre deuxième exemple de code n'est pas valide JavaScript. Le but de la
!
est à son tour la déclaration de la fonction dans une expression de fonction, c'est tout.Le bootstrap twitter utilise tous là, javascript (jQuery) des fichiers de plugin. En ajoutant ce commentaire juste au cas où d'autres pourraient également avoir la même question.
d3.js utilise également le
!function
syntaxeOriginalL'auteur Michael Burr
Il est un bon point pour l'utilisation de
!
pour l'invocation de la fonction marqué sur airbnb JavaScript guideGénéralement l'idée d'utiliser cette technique sur des fichiers séparés (aka modules) qui, plus tard, d'obtenir concaténées. L'inconvénient ici est que les fichiers censé être concaténés par des outils qui mettent le nouveau fichier à la nouvelle ligne (qui de toute façon est un comportement commun pour la plupart des concat outils). Dans ce cas, à l'aide de
!
aidera à éviter les erreurs dans le cas concaténées module manqué point-virgule de fin, et pourtant qui donnera la souplesse nécessaire pour mettre dans n'importe quel ordre avec pas de soucis.Travail sera le même que
mais permet d'économiser les deux personnages et l'arbitraire de l'air mieux.
Et par la manière de
+
,-
,~
,void
les opérateurs ont le même effet, dans les conditions de l'invocation de la fonction, pour sûr, si vous devez utiliser quelque chose pour le retour de cette fonction qu'ils agissent différemment.mais si vous utilisez IIFE modèles pour un fichier un module de séparation du code et à l'aide de concat outil pour l'optimisation (ce qui fait une ligne d'un fichier de travail), puis la construction
Fera fort de l'exécution du code, de même que d'un premier exemple de code.
Celui-ci va jeter cause d'erreur JavaScript ASI ne sera pas en mesure de faire son travail.
Une remarque concernant les opérateurs unaires, ils font un travail semblable, mais seulement dans le cas, ils ont utilisé des pas dans le premier module. Donc ils ne sont pas si sûr, si vous n'avez pas un contrôle total sur la concaténation de l'ordre.
Cela fonctionne:
Ce pas:
OriginalL'auteur dmi3y
Il retourne si la déclaration peut évaluer à false. par exemple:
Vous pouvez l'utiliser deux fois de forcer une valeur booléenne:
Donc, pour plus de répondre directement à votre question:
Edit: Il a aussi pour effet de modifier la déclaration de la fonction à une fonction d'expression. E. g. le code suivant n'est pas valide car elle est interprétée comme une déclaration de fonction qui manque de l' identificateur (ou nom de la fonction):
var myVar = !function(){ return false; }()
pourrait omettre le!
commevar myVar = function(){ return false; }()
et la fonction ne s'exécute correctement et la valeur de retour sera intact.Pour être clair, vous pouvez l'utiliser une fois pour le contraindre à Booléenne, parce que c'est un logique de ne pas de l'opérateur. !0 = true, et de !1 = false. Pour le JavaScript minification, vous voulez remplacer
true
avec!0
etfalse
avec!1
. Il enregistre 2 ou 3 caractères.OriginalL'auteur gilly3
Point d'Exclamation fait toute fonction retourne toujours une valeur booléenne. La valeur finale est la négation de la valeur retournée par la fonction.
Omettant
!
dans les exemples ci-dessus serait un SyntaxError.Cependant, la meilleure façon d'atteindre ce serait:
OriginalL'auteur oozzal
! est une logique PAS opérateur, c'est un opérateur booléen qui va inverser quelque chose à son contraire.
Bien que vous pouvez contourner les parenthèses de la fonction invoquée par l'aide de la BANG (!) avant la fonction, il sera toujours inverser le retour, ce qui pourrait ne pas être ce que tu voulais. Comme dans le cas de l'IEFE, il serait de retour undefined, qui, lorsqu'il inversé devient le booléen true.
OriginalL'auteur SoEzPz
Sa juste pour sauver un octet de données, lorsque nous ne nous en javascript minification.
examiner le dessous de fonction anonyme
À faire la-dessus que l'auto en invoquant la fonction généralement, nous vous modifiez le code ci-dessus comme
Maintenant, nous avons ajouté deux caractères supplémentaires
(,)
en dehors de l'ajout de()
à la fin de la fonction que nécessaire pour appeler la fonction. Dans le processus de minification nous se concentrent généralement de réduire la taille du fichier. Donc nous pouvons écrire la fonction ci-dessus commeEncore les deux sont auto invocation de fonctions et de nous sauver d'un octet. Au lieu de 2 caractères
(,)
nous avons juste utilisé un caractère!
OriginalL'auteur Varatharaj
Son une autre manière d'écrire IIFE (immédiatement invoquées par l'expression de fonction).
Ses autre façon d'écrire -
même que
(function (args) {...})()
de la syntaxe et de le laisser!function
forme de minification et de l'obscurcissement des outils.OriginalL'auteur kamal
!
réduit à néant (en face de) tout ce que vous attendez comme un résultat, j'.e si vous avezlorsque vous appelez
boy
, votre résultat seratrue
, mais au moment où vous ajoutez le!
lors de l'appel deboy
, j'.e!boy
, votre résultat serafalse
. Qui, en d'autres mots, vous dire NotBoy, mais cette fois, c'est essentiellement un résultat booléen, soittrue
oufalse
.C'est la même chose qui arrive à la
!function () {}();
expression, en cours d'exécution uniquementfunction () {}();
vous marquera une erreur, mais ajouter!
juste en face de votrefunction () {}();
expression, en fait tout le contraire de lafunction () {}();
qui devrait revenir voustrue
. L'exemple peut être vu ci-dessous:OriginalL'auteur antzshrek
Nous allons économiser quelques autres octets!
exemple:
(() => 'yeah')();
yep. même mieux.
OriginalL'auteur Zibri