jQuery signe dollar ($) comme argument de fonction?
Je comprends JavaScript fermetures, et je l'ai vu faire en JS natif:
(function () {
//all JS code here
})();
Mais, ce qui ne l'ajout de jQuery spice faire?
(function ($) {
//all JS code here
})(jQuery);
- dans ce cas, $ pourrait être tout ce qu'il va devenir l'objet jquery à l'intérieur de cette fonction , la fonction $(y){})(jQuery);
Vous devez vous connecter pour publier un commentaire.
Sa façon de cartographie de jQuery pour l' $ en sorte que pas tout le code dans une page va le voir.
Peut-être que vous avez un script qui utilise jQuery que vous souhaitez réutiliser, mais vous pouvez également utiliser le prototype, qui utilise également l' $ dans la même page.
En enveloppant le tout à l'aide de jQuery code qui construisent de vous redéfinir $ à jQuery pour la partie sans entrer en conflit avec un autre code dans la page.
jQuery
à$
, précieux dans la prévention de la variable de levage à l'extérieur de la IIFE portée de la fonction.Quand vous voyez:
Il sait que auto-invocation de fonction anonyme. La fonction s'exécute dès que c'est analysée en raison de l'ajout de
()
à la fin (c'est la façon dont vous exécutez js fonctions).Avis supplémentaire externe accolades sont juste convention, vous pouvez aussi l'écrire comme:
Mais cette convention est largement utilisé à travers et vous devez vous en tenir à elle.
Ici,
$
est mappé àjQuery
objet, de telle sorte que vous pouvez utiliser$
au lieu dejQuery
mot-clé. Vous pouvez aussi mettre un autre caractère, là encore,Ici,
j
est mappé àjQuery
objet à la place.Notez également que les arguments spécifiés à l'auto-invocation de la fonction restent dans le champ d'application de cette fonction et n'entrent pas en conflit avec l'extérieur et la portée des variables.
J'avais écrit un article sur le sujet, s'il vous plaît vérifier:
$
un alias pourjQuery
par défaut?(function($) { // all JS code here })(jQuery);
...............(function(){ alert("o"); })()
est ok, maisfunction(){ alert("o"); }()
n'est pas dans Chrome/Firefox de la Console, donc je pense que ce n'est pas une convention qui doit bâton (comme indiqué dans votre réponse), c'est un must?Est Immédiatement appelée à la Fonction d'Expression (IIFE), prononcé "douteux". Certaines personnes ont aussi appeler "anonyme, auto-exécution des fonctions", ou simplement "l'auto-exécution des fonctions".
Voici une IIFE qui prend le paramètre 'aParameter" et passe lui-même l'argument "un argument".
C'est pareil, mais "jQuery" (L'objet jQuery exemple) est l'argument de la IIFE, et dans ce cas, jQuery est transmis comme le '$' paramètre. De cette façon, simplement en tapant '$', le corps de la IIFE a accès à jQuery et de ses membres. C'est une commune jQuery convention, et il est commun pour les gens de l'écriture de plugins jQuery pour maintenir cette convention dans ce sens.
Non seulement le code ci-dessus maintenir le jQuery convention, il s'assure également que ni vous ni personne d'autre ne peut casser accidentellement cette convention. E. g., prenez le code suivant:
Ce code devient '$' dans quelque chose qui n'est certainement pas jQuery. Si quelqu'un l'a fait dans d'autres codes à l'extérieur de votre plugin code, et puis vous n'avez pas explicitement passer jQuery '$' pour votre plugin, alors vous ne pourrez pas utiliser '$' comme jQuery comme vous le faites habituellement.
Il y a deux raisons pour passer de jQuery dans une fermeture de cette façon.
De loin la plus importante est que cela rend votre code sur les pages qui utilisent jQuery "pas de conflit" mode, ce qui permet l'utilisation de jQuery avec d'autres bibliothèques qui veulent contrôler le
$
mondiale. Pour cette raison, la(function($) { ... })(jQuery)
technique est fortement recommandé lors de l'écriture de plugins jQuery.L'autre raison est qu'il rend
$
une variable locale dans le champ d'application de l'auto-exécution de la fonction et de variable locale d'accès est (un peu) plus rapide que la variable globale d'accès. Personnellement, je ne considère pas cela d'un très convaincante — je ne peux pas imaginer un scénario dans lequel la surcharge de l'utilisation de jQuery plutôt que les méthodes du DOM pourrait être acceptable, mais celui de l'accès jQuery comme une variable globale ne serait pas. 🙂Je dirais que la meilleure raison d'utiliser cette technique lorsque pas l'écriture d'un plugin est pour des raisons de cohérence — vous êtes moins susceptibles d'oublier de le faire quand il est important si vous avez l'habitude de le faire quand il n'est pas. En outre, vous ne savez jamais quand vous aurez l'occasion de recycler de code!