Le raccourci suivant est-il pour $(document).ready
?
(function($){
//some code
})(jQuery);
Je vois beaucoup ce schéma, mais je ne trouve aucune référence à celui-ci. Si c'est un raccourci pour $(document).ready()
, y a-t-il une raison particulière pour laquelle cela pourrait ne pas fonctionner? Dans mes tests, il semble toujours se déclencher avant l'événement ready.
Le raccourci pour $(document).ready(handler)
est $(handler)
(où handler
est une fonction). Voir ici .
Le code de votre question n'a rien à voir avec .ready()
. Il s'agit plutôt d'une expression de fonction immédiatement appelée (IIFE) avec l'objet jQuery comme argument. Son but est de restreindre au moins la portée de la variable $
à son propre bloc afin d'éviter les conflits. Vous voyez généralement le motif utilisé par les plugins jQuery pour vous assurer que $ == jQuery
.
La sténographie est:
$(function() {
// Code here
});
La sténographie correcte est la suivante:
$(function() {
// this behaves as if within document.ready
});
Le code que vous avez posté…
(function($){
//some code
})(jQuery);
… Crée une fonction anonyme et l'exécute immédiatement en transmettant jQuery
en tant que arg $
. Tout ce que cela fait est de prendre le code dans la fonction et de l'exécuter normalement, puisque $
est déjà un alias pour jQuery
. :RÉ
Ce n'est pas un raccourci pour $(document).ready()
.
Le code que vous avez posté encadre le code interne et rend jQuery disponible en tant que $
sans polluer l'espace de nom global. Cela peut être utilisé lorsque vous souhaitez utiliser le prototype et jQuery sur une page.
Documenté ici: http://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/#use-an-immediately-invoked-function-expression
Ces lignes spécifiques sont le wrapper habituel pour les plugins jQuery:
"... pour vous assurer que votre plug-in n'entre pas en collision avec d'autres bibliothèques pouvant utiliser le signe dollar, il est recommandé de passer jQuery à une fonction auto-exécutante (fermeture) qui le mappe sur le signe dollar afin qu'il puisse" t être écrasé par une autre bibliothèque dans le cadre de son exécution. "
(function( $ ){
$.fn.myPlugin = function() {
// Do your awesome plugin stuff here
};
})( jQuery );
Le raccourci multi-framework pour ready est:
jQuery(function($, undefined) {
// $ is guaranteed to be short for jQuery in this scope
// undefined is provided because it could have been overwritten elsewhere
});
En effet, jQuery n'est pas le seul framework qui utilise les variables $
et undefined
.
Même variante plus courte est d'utiliser
$(()=>{
});
où $
signifie jQuery et ()=>{}
est ainsi appelé 'fonction de flèche' qui hérite de this
de la fermeture. (Ainsi, dans this
, vous aurez probablement window
à la place de document
.)