Utiliser `var` ou non
Vous devez introduire n'importe quelle variable avec l' var
instruction, sinon elle atteint la portée globale.
Il convient de mentionner qu'en mode strict ( "use strict";
), les affectations de variables non déclarées sont lancéesReferenceError
.
À l'heure actuelle, JavaScript n'a pas de portée de bloc. L'école de Crockford vous apprend à placer des instructions var au début du corps de la fonction , tandis que le guide de style de Dojo indique que toutes les variables doivent être déclarées dans la plus petite portée possible . (L' let
instruction et la définition introduites dans JavaScript 1.7 ne font pas partie de la norme ECMAScript.)
Il est recommandé de lier les propriétés des objets régulièrement utilisés aux variables locales car cela est plus rapide que de rechercher toute la chaîne de portée. (Voir Optimisation de JavaScript pour des performances extrêmes et une faible consommation de mémoire .)
Définir des choses dans le fichier, ou dans un `((fonction () {...}) ()`
Si vous n'avez pas besoin d'accéder à vos objets en dehors de votre code, vous pouvez envelopper tout votre code dans une expression de fonction - c'est ce qu'on appelle le modèle de module. Il présente des avantages en termes de performances et permet également de réduire et masquer votre code à un niveau élevé. Vous pouvez également vous assurer qu'il ne polluera pas l'espace de noms global. Les fonctions d'habillage en JavaScript vous permettent également d'ajouter un comportement orienté aspect. Ben Cherry a un article détaillé sur le modèle de module .
Utiliser «ceci» ou non
Si vous utilisez l'héritage pseudo-classique en JavaScript, vous pouvez difficilement éviter de l'utiliser this
. C'est une question de goût quel modèle d'héritage vous utilisez. Pour d'autres cas, consultez l'article de Peter Michaux sur les widgets JavaScript sans "ceci" .
Utilisation de `function myname ()` ou `myname = function ();`
function myname()
est une déclaration de fonction et myname = function();
est une expression de fonction affectée à une variable myname
. Cette dernière forme indique que les fonctions sont des objets de première classe, et vous pouvez faire n'importe quoi avec elles, comme avec une variable. La seule différence entre elles est que toutes les déclarations de fonctions sont hissées au sommet de la portée, ce qui peut être important dans certains cas. Sinon, ils sont égaux. function foo()
est une forme abrégée. Pour plus de détails sur le levage, consultez l'article JavaScript Scoping and Hoisting .
Définir des méthodes dans le corps de l'objet ou utiliser "prototype"
C'est à vous. JavaScript a quatre modèles de création d'objets: pseudo-classique, prototypique, fonctionnel et pièces ( Crockford, 2008 ). Chacun a ses avantages et ses inconvénients, voir Crockford dans ses conversations vidéo ou obtenir son livre The Good Parts comme Anon l'a déjà suggéré .
Cadres
Je vous suggère de choisir des frameworks JavaScript, d'étudier leurs conventions et leur style, et de trouver les pratiques et les modèles qui vous conviennent le mieux. Par exemple, le Dojo Toolkit fournit un cadre robuste pour écrire du code JavaScript orienté objet qui prend même en charge l'héritage multiple.
Motifs
Enfin, il existe un blog dédié à l' exploration des modèles et anti-modèles JavaScript courants . Consultez également la question Existe-t-il des normes de codage pour JavaScript? dans Stack Overflow.