JavaScript / jQuery fermeture de la syntaxe de la fonction
Quelqu'un peut-il expliquer les différences entre les fonctions suivantes:
(function($){
//can do something like
$.fn.function_name = function(x){};
})(jQuery);
Pourrais-je utiliser jQuery dans la fonction suivante?
(function(){
}());
Et est la suivante le même que jquery.prêt()?
$(function(){
});
Merci!
- double possible de une question simple sur jquery fermeture
- stackoverflow.com/questions/4484289/...
- Assez sûr que la seconde fin avec
})();
, mais je ne peux pas modifier 1 seul caractère. 🙁 - De toute façon fonctionne de la même façon.
Vous devez vous connecter pour publier un commentaire.
Qui est auto-exécution de la fonction anonyme qui utilise
$
en argument, de sorte que vous pouvez l'utiliser ($
) au lieu dejQuery
à l'intérieur de cette fonction et sans la peur d'entrer en conflit avec d'autres bibliothèques parce que dans d'autres bibliothèques trop$
a une signification spéciale. Ce modèle est particulièrement utile lors de l'écriture de plugins jQuery.Vous pouvez écrire n'importe quel caractère de là, au lieu de
$
trop:Ici
j
automatiquement rattraper jQuery spécifié à la fin(jQuery)
. Ou vous pouvez laisser de côté l'argument complètement, mais alors vous devrez utiliserjQuery
mot-clé tout autour de la place de$
sans crainte de collision encore. Donc$
est enveloppé dans l'argument de la court de main de sorte que vous pouvez écrire$
au lieu dejQuery
tout autour de l'intérieur de cette fonction.Qui est auto-exécution de la fonction anonyme à nouveau, mais avec aucun des arguments et des pistes/appelle elle-même à cause de
()
à la fin.Que les modèles s'avère être très utiles dans certaines situations. Par exemple, disons que vous souhaitez exécuter un morceau de code au bout de 500 milli secondes à chaque fois, vous serait naturellement aller pour
setInterval
.Mais que faire si
doStuff
fonction prend plus de 500 moulin-secondes pour faire ce qu'il est en train de faire? Vous serait témoin des résultats inattendus maissetInterval
va garder en appelant cette fonction, encore et encore à l'heure spécifiée indépendamment de savoir sidoStuff
fini.C'est là que le patron arrive et vous pouvez faire la même chose avec
setTimeout
en combinaison avec l'auto-exécution de la fonction anonyme et éviter mauvaissetInterval
comme ceci:Ce code vous répète encore et encore avec une différence.
setTimeout
ne sera jamais déclenché, à moins quedoStuff
est fini. Une bien meilleure approche que les mauvaissetInterval
.Vous pouvez le tester ici.
Notez que vous pouvez aussi écrire à l'auto-exécution de la fonction anonyme comme ceci:
En utilisant des accolades autour (comme avant
function
mot-clé) est tout simplement convention de codage et peut être vu dans Crackford écrits, jQuery et ailleurs.Qui est à court de main syntaxe prêt à l'emploi gestionnaire:
Plus D'Informations:
jQuery(someFunction)
passe à l'objet jQuery comme premier argument de la fonction de rappel. Cela permet de faire un peu plus sûr-mais-toujours-laconique version du document prêt gestionnaire:jQuery(function($){ ...use $ here without fear of global collision... });
setTimeout
bénéficier personnellement, je file dans le "anti-modèle" de la catégorie. Pour des raisons de concision, c'est pas la peine de perdre dans le code de la clarté, de l'IDE code de l'aider, et de débogage; je vous laisse le code de raccourcissement automatique minification des outils.function() { /* Some code */ }();
Est en fait pas syntaxe valide.Je sais que cette question est vieux, mais je suis tombé sur elle en ce moment et d'autres personnes. Je voulais juste faire remarquer que, bien que Sarfraz la réponse est grand, il doit être dit que pas de, la rédaction d'un auto-exécution, de la fonction anonyme dans accolades est pas un convention de codage.
Ne fonctionnera pas et de donner un
SyntaxError
parce que la fonction est en train d'être analysée comme uneFunctionDeclaration
, et le nom de la fonction n'est pas une option dans ce cas.D'autre part, la Groupement De L'Opérateur permet de s'assurer que le contenu est évalué comme un
FunctionExpression
.Voir: Expliquer JavaScript est encapsulé anonyme syntaxe de la fonction