Expressions de fonctions immédiatement invoquées (IIFE)
Les IIFE sont une solution idéale pour marquer localement les variables/propriétés globales et protéger votre base de code JavaScript contre les interférences extérieures (par exemple, les bibliothèques tierces). Si vous écrivez du code jQuery qui sera exécuté dans de nombreux environnements différents (par exemple, des plugins jQuery), il est important d'utiliser un IIFE pour délimiter localement jQuery, car vous ne pouvez pas supposer que tout le monde utilise le $ pour aliaser jQuery. Voici comment procéder :
// IIFE - Immediately Invoked Function Expression
(function($, window, document) {
// The $ is now locally scoped
// The rest of your code goes here!
}(window.jQuery, window, document));
// The global jQuery object is passed as a parameter
Si vous n'aimez pas avoir à défiler jusqu'au bas de votre fichier source pour voir quelles variables/propriétés globales vous passez à votre IIFE, vous pouvez le faire :
// IIFE - Immediately Invoked Function Expression
(function(yourcode) {
// The global jQuery object is passed as a parameter
yourcode(window.jQuery, window, document);
}(function($, window, document) {
// The rest of your code goes here!
}
));
Pour en savoir plus sur les IIFE, vous pouvez consulter mon article de blog intitulé, J'aime mon IIFE .
Événement jQuery Ready
De nombreux développeurs intègrent tout leur code dans l'événement jQuery ready de la manière suivante :
$("document").ready(function() {
// The DOM is ready!
// The rest of your code goes here!
});
Ou une version plus courte comme celle-ci :
$(function() {
// The DOM is ready!
// The rest of your code goes here!
});
Si vous suivez l'un ou l'autre des schémas ci-dessus, alors vous devriez envisager de déplacer les éléments de votre application (par exemple les méthodes), qui ne dépendent pas du DOM, en dehors du gestionnaire de l'événement ready. Comme ceci :
// IIFE - Immediately Invoked Function Expression
(function(yourcode) {
// The global jQuery object is passed as a parameter
yourcode(window.jQuery, window, document);
}(function($, window, document) {
// The $ is now locally scoped
$(function() {
// The DOM is ready!
});
// The rest of your code goes here!
}
));
Ce modèle permet plus facile de séparer votre logique (du point de vue de la conception du code), car il n'est pas nécessaire de tout intégrer dans une seule fonction de rappel du gestionnaire d'événements. Il sera également possible de améliorer les performances de chargement des pages de votre application car tout n'a pas besoin d'être initialisé immédiatement. Un bon exemple de ceci est lazy binding DOM event handlers qui n'ont pas besoin d'être liés lorsque le DOM est prêt.
Adapté de mon article de blog sur les meilleures pratiques de jQuery : http://gregfranko.com/blog/jquery-best-practices/