2012-03-17 18 views
6

Qual è l'approccio meno incline agli errori nel dichiarare le variabili in JavaScript?Convenzioni codice JavaScript - dichiarazione variabile

var a; 
var b; 
var c; 

o

var a, 
    b, 
    c; 

jQuery e Dojo utilizzare il secondo approccio e personalmente questo è il mio preferito in termini di codice la leggibilità, il problema è che trovo più difficile da eseguire il debug.

Esempio 1:

var a, 
    b, 
    c; // oops.. semicolon instead of comma 
    d, 
    e; 

Esempio 2:

Durante la ricerca di una certa variabile nel progetto, var spicca meglio che la variabile viene dichiarata.

EDIT: Gli esempi originali erano errati, ho commesso un errore durante la copia e l'incolla. Il codice è già aggiornato, mi dispiace per l'inconveniente.

+1

Intendevi utilizzare il punto e virgola anziché le virgole? Questo genera errori variabili non definiti in Safari. –

+0

@JeffreySweeney stai eseguendo il codice con un errore? le virgole funzionano bene – david

+0

@david Le virgole lo fanno, ma i punti e virgola no. –

risposta

5

Più dichiarazioni variabili (anziché combinate) sono meno soggette a errori, per i motivi che hai menzionato. Tuttavia, le dichiarazioni combinate presentano alcuni altri vantaggi:

  • JSLint e probabilmente altri ltri si lamenteranno di più var parole chiave per ambito.
  • Una singola parola chiave var si limita meglio di molti, per ovvi motivi.
  • La combinazione di dichiarazioni obbliga a dichiarare le variabili in un posto, probabilmente vicino all'inizio della funzione in cui risiedono, il che è considerato una buona pratica.

Sul rovescio della medaglia, come hai detto, si possono commettere errori con le dichiarazioni variabili combinate, e possono essere rappresentate in modo impacciato in una diff.

Finché si mantiene uno stile coerente di dichiarazione delle variabili in tutto il progetto, lo stile scelto non dovrebbe avere molta importanza.

0

La seconda opzione è migliore nel mio libro, in quanto è meno ridondante. I moderni browser e IDE rendono abbastanza facile trovare un bug come hai chiamato.

Ecco uno jsFiddle che mostra cosa succede. Inserendo accidentalmente un punto e virgola nella serie, viene generato un valore Uncaught ReferenceError. È una soluzione rapida e un piccolo compromesso per una migliore sintassi. Se questo è il bug peggiore che devi affrontare quando scrivi JavaScript, stai passando una bella giornata.

Ironia della sorte, si è verificato un errore nel secondo esempio: punto e virgola dopo a. Ops. :)

MODIFICA: errore di battitura fisso del poster originale; Lascio la menzione perché è pertinente alla domanda originale.

+0

Errori come quello che ha fatto, prima opzione migliore :) – Ramesh

+0

@Josh Earl L'ho già risolto, grazie. –

1
var a; 
var b; 
var c; 

è l'approccio migliore perché non genera un errore non definito. Anche le variabili saranno adeguatamente circoscritte & non nell'ambito globale.

var a=10; 
    b=5; 

risulterebbe b nell'ambito globale.

MODIFICA: questo era nel contesto con il campione pubblicato originariamente https://stackoverflow.com/revisions/9746359/2. Con il contesto aggiornato, si riduce a più preferenze individuali. La mia raccomandazione sarà quella di non dare spazio a quegli errori in quanto è difficile trovarli.

+3

"le variabili avranno un ambito appropriato e non nell'ambito globale." Che cosa??? Le variabili sono issate nella parte superiore dell'ambito, ma function() {var a, b, c; } ha ancora le variabili con scope come nella funzione. – Corbin

+0

@Ramesh Sì ... non così tanto.L'unica volta che una variabile finisce automaticamente nello scope globale è quando non è dichiarata. Sta chiedendo degli stili equivalenti per dichiarare una variabile - né mette necessariamente le variabili nello scope globale. –

+1

Un piccolo errore durante l'assegnazione di var a = 10; b = 15; risulterebbe in un ambito globale. La sua domanda inizialmente aveva var a; b, c; – Ramesh

2

Preferisco il secondo approccio dell'utilizzo di una sola parola chiave var. Recentemente ho fatto un ulteriore passo avanti e istanziato i tipi su ogni variabile per aiutarmi a prevenire la revisione di tipo non intenzionale in seguito. Un esempio è:

var a = 0, 
    b = 0, 
    c = {}, 
    d = [], 
    f = ""; 

Fornisco un valore reale qui se ho un valore da fornire a questo punto. Se non fornisco i seguenti valori fittizi:

  • 0 per tipi di numero
  • [] per matrice
  • {} per oggetto letterale e nodi DOM
  • "" per stringa
  • function() {return;} per funzioni
  • false per booleano
  • per questo scopo non mi preoccupo dei tipi di pre-assegnazione per i tipi Math, Date o RegExp.
+0

Questa sembra essere un'ottima soluzione che previene anche errori relativi a errori tipografici. –

+0

La mia motivazione principale è la prestazione. Gli ultimi interpreti preferiscono la tipizzazione rigorosa, quindi ho dovuto modificare il mio comportamento e il mio stile per soddisfare questo nuovo requisito non ufficiale della codifica di qualità professionale. – austincheney

+2

Perché 'function() {return;}'? 'function() {}' farebbe la stessa cosa – icktoofay

0

C'è un bonus per avere la dichiarazione multipla di una variabile usando 1 var.

È possibile avere uno script min. Inferiore. Ovviamente i 4 byte richiesti per avere una dichiarazione var non fanno molta differenza fino a quando sei un posto come stackoverflow.com. Milioni su milioni di download == concerti di trasferimento basati solo su alcune dichiarazioni extra var.

+1

Un buon minificatore come UglifyJS schiaccerà automaticamente le istruzioni sequenziali in uno, rendendo il punto discutibile –

Problemi correlati