Disons que nous avons du code qui est utilisé pour initialiser les choses lorsqu'une page est chargée et cela ressemble à ceci:
function initStuff() { ...}
...
$(document).ready(initStuff);
La fonction initStuff n'est appelée qu'à partir de la troisième ligne de l'extrait de code. Plus jamais. Donc, généralement, les gens mettent cela dans un rappel anonyme comme celui-ci:
$(document).ready(function() {
//Body of initStuff
});
Avoir la fonction dans un emplacement dédié dans le code n'aide pas vraiment à la lisibilité, car avec l'appel à ready (), il est évident que c'est du code d'initialisation.
Y a-t-il d'autres raisons de préférer l'une à l'autre?
coding-style
jquery
Martin N.
la source
la source
Réponses:
Comme @ Stargazer712 l'a mentionné, le premier encombre l'espace de noms mondial, donc le second est le gagnant à mon humble avis. Maintenant, cela étant dit, parce que vous utilisez une fonction anonyme dans le deuxième exemple, la pile d'appels de votre débogueur sera inutile et obtiendra des résultats différents selon le débogueur que vous utilisez. Habituellement, ce que je finis par faire, c'est:
De cette façon, l'espace de noms global n'est pas encombré et vous disposez d'une pile d'appels utile.
J'ai tendance à utiliser la convention ci-dessus dans toutes les définitions de fonctions anonymes (enfin, plus anonymes;)). C'est une convention que j'ai trouvée lors de la navigation dans le code Firefox JS.
Edit: Maintenant, après avoir dit tout cela, Oliver soulève un bon point avec des tests unitaires. Ce qui précède est censé agir comme un wrapper pour des opérations plus complexes, pas pour héberger une tonne de code non testé.
la source
Je dirais que dans ce cas, cela n'a probablement pas d'importance, mais si vous avez des fonctions de rappel anonyme, appelant d'autres fonctions de rappel anonyme, j'ai tendance à utiliser la première approche, car cela rend le code beaucoup plus lisible et plus facile à suivre.
En ce qui concerne les tests unitaires, la première approche serait meilleure, car vous seriez en mesure de tester la
initstuff
fonction de manière isolée.la source
J'irais pour le premier, pour la lisibilité / débogage / test, etc. Vous pouvez éviter le problème d'encombrement global de l'espace de noms en créant simplement un espace de noms local pour toutes les fonctions de votre page. J'utilise le style de notation d'objet, comme recommandé par Paul Irish (voir les diapositives 13-15 sur http://paulirish.com/2009/perf/ )
la source
Il y a aussi une troisième façon d'enregistrer les méthodes init sans encombrer l'espace de noms global que je préfère:
C'est court et évite la recherche de documents DOM comme
Est-ce que.
la source
$
je préfère:jQuery(function($) {...});