Je regarde un morceau de code:
(function($) {
// other code here
$(document).ready(function() {
// other code here
});
})(jQuery);
Je pense que le IIFE utilise les fonctions de $ (document) .ready, ce code est-il correct? ou puis-je simplement supprimer le $ (document) .ready et placer le code directement à l'intérieur de l'IIFE.
Non, IIFE n'exécute pas le code dans le document prêt.
(function($) {
console.log('logs immediately');
})(jQuery);
Ce code exécute immédiatement les journaux "journaux immédiatement" sans que le document soit prêt.
(function($) {
$(document).ready(function(){
console.log('logs after ready');
});
})(jQuery);
Exécute le code immédiatement et attend le document prêt et enregistre les "journaux après prêt".
Cela explique mieux à comprendre:
(function($) {
console.log('logs immediately');
$(document).ready(function(){
console.log('logs after ready');
});
})(jQuery);
Cela enregistre "immédiatement les journaux" sur la console immédiatement après le chargement de la fenêtre, mais les "journaux après l'état prêt" ne sont consignés qu'une fois le document prêt.
L'alternative pour $(document).ready(function(){})
est:
$(function(){
//code in here
});
À partir de la version 3.0 de jQuery, le gestionnaire prêt est modifié.
Seule la forme suivante de gestionnaire prêt est recommandée.
jQuery(function($) {
});
Le gestionnaire Ready est maintenant asynchrone.
$(function() {
console.log("inside handler");
});
console.log("outside handler");
> manutentionnaire extérieur
> manipulateur intérieur
$(function() {/* DOM Manipulations goes here})
(function($) {/* safely use $ here*/}(jQuery))
Et vous pouvez combiner les deux approches:
(function($) {
/*Do smth that doesn't require DOM to be ready*/
$(function() {
/*Do the rest stuff involving DOM manipulations*/
});
}(jQuery));
IIFE
doit créer une autre étendue. Si vous supprimez IIFE
et $
ne sera pas défini (c'est-à-dire jQuery.noConflict()
) - vous obtiendrez une erreur. jQuery
sera défini partout où le fichier javascript avec la bibliothèque a été chargé.
Donc, ce n'est pas la meilleure pratique jQuery, c'est une meilleure pratique javascript.
IIFE exécute les fonctions lorsque Contexte d'exécution (la portée du code en cours d'évaluation) est prêt. Consultez l'article sur Concepts d'organisation de code dans jQuery qui décrit les deux modèles les plus courants, Le littéral d'objet et Le modèle de module , et comment les utiliser.