Ce n' (function (x,y){...})(a,b); moyen en JavaScript?
J'ai vu cette fonction:
(function (x, y, data, lbl, dot) {
//Function body...
})(x, y, data[i], labels[i], dot);
Qu'est-ce que cela? Une fonction? Pourquoi une définition de fonction dans ()
?
double possible de Est la suivante JavaScript construction appelée une Fermeture?
OriginalL'auteur user285020 | 2010-10-13
Vous devez vous connecter pour publier un commentaire.
En javascript, vous pouvez avoir
anonymous
etself invoking
fonctions.est la même que
et que vous appelez les comme
Vous pouvez définir la fonction et de l'appeler immédiatement comme
La
partie définit une fonction, et la
(10, 20)
immédiatement après, il appelle la fonction venons de définir, avec 10 et 20 comme arguments.Puisque la fonction n'a pas de nom, il ne peut pas être utilisé plus tard dans le code.
Le code dans votre question est probablement minifiés, et crée une fonction, d'une manière similaire et appelle immédiatement.
Oui, la différence est le nom.
function x{} ();
crée une fonctionx
et appelle immédiatement. Mais il peut être appelé de nouveau, en utilisant le nom:x();
. Mais(function(){})();
crée une fonction anonyme, l'appelle et après que la fonction ne peut pas être utilisé à nouveau.Pourquoi dois-je créer fonction anonyme (ne jamais l'utiliser à nouveau) et de l'appeler immédiatement après la définition? - À la place, je pourrais juste (dans cet exemple) de retour de 10 + 20. ET pas de définir la fonction d'une logique de a + b et plus tard de l'appeler juste pour 10,20?
Ouais, je seconde cette. Pourquoi arguments dans une IIFE? On pourrait tout coder en dur les valeurs à mettre dedans.
OriginalL'auteur Nivas
function() {}
est un définition d'une fonction anonyme et(function() {})()
est un appel de cette fonction anonyme.Cela fonctionne étant donné que les fonctions peuvent être passés comme des données. Donc
window.alert
est connualert
fonction elle-même etwindow.alert()
va appeler cette fonction.Cette technique est souvent utilisée pour maintenir le courant de la portée des variables propres que la fonction a sa propre portée des variables.
function() {}
génère une erreur dans google Chrome: "inattendue" ('".OriginalL'auteur Gumbo
Il s'agit d'un anonyme en invoquant la fonction. La fonction est définie et exécutée immédiatement. La parenthèse qui enveloppent la fonction de s'assurer qu'il est traité comme un expression de fonction au lieu d'un déclaration de la fonction. La dernière paire de parenthèses appeler la fonction et de passer les arguments.
OriginalL'auteur Daniel Vassallo
Une auto-exécution de la fonction anonyme serait une assez bonne description.
OriginalL'auteur Jacob Relkin
C'est une auto invocation de la fonction, il est exécutée immédiatement.
Auto invoquant les fonctions sont efficaces pour éviter la création de variables globales, jQuery utilise ce de manière très efficace.
OriginalL'auteur Q_Mlilo
La fonction à l'intérieur de la parenthèse est une fonction anonyme. Je ne peux pas dire pourquoi c'est fait comme il est fait, mais le programmeur définit et fonction anonyme, et appelle immédiatement. Vous pourriez probablement faire la même chose par simple substitution de ses arguments avec les valeurs transmises, et la suppression de la définition de la fonction.
OriginalL'auteur vhallac
est le même que
il définit une auto invoquant la fonction anonyme. Il est exécuté et puis jetés. C'est une façon de ranger votre code (même si c'est un mauvais exemple) et d'avoir des variables privées uniquement dans la portée. Il ne sera pas stockés à l'intérieur de la clôture.
OriginalL'auteur DoXicK