Utiliser `var` ou non
Vous devez introduire toute variable avec le caractère var
sinon, il atteint la portée globale.
Il convient de mentionner qu'en mode strict ( "use strict";
) les affectations de variables non déclarées sont rejetées ReferenceError
.
Actuellement, JavaScript n'a pas de portée de bloc. L'école Crockford vous apprend à placer les déclarations var au début du corps de la fonction alors que le guide de style de Dojo indique que toutes les variables doivent être déclarées dans la plus petite portée possible . (Le let
déclaration et définition introduite dans JavaScript 1.7 ne fait pas partie de la norme ECMAScript).
C'est une bonne pratique de lier les propriétés des objets régulièrement utilisés à des 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 `(function(){...})()`.
Si vous n'avez pas besoin d'atteindre vos objets en dehors de votre code, vous pouvez envelopper l'ensemble de 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 de masquer votre code à un niveau élevé. Vous pouvez également vous assurer qu'il ne polluera pas l'espace de noms global. Habillage des fonctions en JavaScript vous permet également d'ajouter un comportement orienté vers les aspects. Ben Cherry a un article approfondi sur le modèle de module .
Utiliser `this` ou non
Si vous utilisez l'héritage pseudo-classique en JavaScript, vous pouvez difficilement éviter d'utiliser les éléments suivants this
. C'est une question de goût quant au modèle d'héritage que vous utilisez. Pour d'autres cas, consultez l'article de Peter Michaux sur les Widgets JavaScript sans "this .
Utilisation de `fonction myname()` ou `myname = function();`
function myname()
est une déclaration de fonction et myname = function();
est une expression de fonction affectée à la variable myname
. Cette dernière forme indique que les fonctions sont des objets de première classe, et que vous pouvez faire n'importe quoi avec elles, comme avec une variable. La seule différence entre les deux 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, elles sont égales. function foo()
est une forme abrégée. Vous trouverez de plus amples informations sur le levage dans le document Scoping et levage JavaScript article.
Définition des méthodes dans le corps de l'objet ou utilisation du "prototype".
C'est vous qui décidez. JavaScript dispose de quatre modèles de création d'objets : pseudo-classique, prototypique, fonctionnel et par parties ( Crockford, 2008 ). Chacun a ses avantages et ses inconvénients, voir Crockford dans sa vidéo parle ou obtenir son livre Les bons côtés comme Anon a déjà suggéré .
Cadres de travail
Je vous suggère de choisir quelques 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 Boîte à outils Dojo 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 consacré à explorer les modèles et anti-modèles JavaScript courants . Consultez également la question Existe-t-il des normes de codage pour JavaScript ? dans Stack Overflow.