Usando `var` o no
È necessario introdurre qualsiasi variabile con l' var
istruzione, altrimenti si arriva all'ambito globale.
Vale la pena ricordare che in modalità rigida ( "use strict";
) vengono generati assegnazioni di variabili non dichiarateReferenceError
.
Attualmente JavaScript non ha un ambito di blocco. La scuola di Crockford ti insegna a mettere le dichiarazioni var all'inizio del corpo della funzione , mentre la Guida allo stile di Dojo legge che tutte le variabili dovrebbero essere dichiarate nel più piccolo ambito possibile . (La let
dichiarazione e la definizione introdotte in JavaScript 1.7 non fanno parte dello standard ECMAScript.)
È buona norma associare le proprietà degli oggetti utilizzati regolarmente alle variabili locali poiché è più veloce che cercare l'intera catena dell'ambito. (Vedi Ottimizzare JavaScript per prestazioni estreme e basso consumo di memoria .)
Definire le cose nel file o in un ((function () {...}) () `
Se non hai bisogno di raggiungere i tuoi oggetti al di fuori del tuo codice, puoi racchiudere l'intero codice in un'espressione di funzione - si chiama modello del modulo. Presenta vantaggi prestazionali e consente inoltre di minimizzare e oscurare il codice ad alto livello. Puoi anche assicurarti che non inquinerà lo spazio dei nomi globale. Le funzioni di avvolgimento in JavaScript consentono inoltre di aggiungere comportamenti orientati all'aspetto. Ben Cherry ha un articolo approfondito sul modello di modulo .
Usando `this` o no
Se usi l'ereditarietà pseudo-classica in JavaScript, difficilmente puoi evitare di usarla this
. È una questione di gusti quale modello di eredità usi. Per altri casi, consulta l'articolo di Peter Michaux sui widget JavaScript senza "questo" .
Usando `function myname ()` o `myname = function ();`
function myname()
è una dichiarazione di funzione ed myname = function();
è un'espressione di funzione assegnata alla variabile myname
. Quest'ultimo modulo indica che le funzioni sono oggetti di prima classe e puoi farci qualsiasi cosa, come con una variabile. L'unica differenza tra loro è che tutte le dichiarazioni di funzioni sono sollevate al di sopra dell'ambito di applicazione, il che può avere importanza in alcuni casi. Altrimenti sono uguali. function foo()
è una forma abbreviata. Ulteriori dettagli sul sollevamento sono disponibili nell'articolo Scoping e sollevamento di JavaScript .
Definire metodi nel corpo dell'oggetto o usare "prototipo"
Tocca a voi. JavaScript ha quattro modelli di creazione di oggetti: pseudo-classico, prototipico, funzionale e parti ( Crockford, 2008 ). Ognuno ha i suoi pro e contro, vedere Crockford nei suoi discorsi video o ottenere il suo libro The Good Parts come Anon ha già suggerito .
Frameworks
Ti suggerisco di raccogliere alcuni framework JavaScript, studiare le loro convenzioni e il loro stile e trovare le pratiche e i modelli più adatti a te. Ad esempio, Dojo Toolkit fornisce un solido framework per scrivere codice JavaScript orientato agli oggetti che supporta anche l'ereditarietà multipla.
Patterns
Infine, esiste un blog dedicato all'esplorazione di schemi e anti-schemi JavaScript comuni . Controlla anche la domanda Esistono standard di codifica per JavaScript? in Stack Overflow.