var
da solo non esegue un incarico. Segnala che quando si utilizza il nome della variabile in tutto lo scope in cui si verifica lo var
, si sta parlando di una variabile locale e non globale (il controverso valore predefinito). Il var
è macchiato quando la funzione viene analizzato e tiene tutto quel campo di applicazione, in modo da dove lo metti è irrilevante:
var a= 0;
function foo() {
a= 1;
return a;
var a;
}
var b= foo();
alert('global a='+a+', local a='+b);
Risultati in global a= 0, local a= 1
: anche se la dichiarazione var
non viene mai raggiunto nel corso di esecuzione di foo()
, è ancora efficace nel rendere a
una variabile locale.
Quindi dichiarare var x
una seconda volta nello stesso ambito è completamente ridondante. Tuttavia a volte potresti ancora farlo, in genere quando riutilizzi un nome di variabile locale per un secondo uso indipendente all'interno della stessa funzione. Più comunemente:
for (var i= 0; i<onething.length; i++) {
...do some trivial loop...
}
for (var i= 0; i<anotherthing.length; i++) {
...do another trivial loop...
}
Mentre si potrebbe certamente omettere il secondo var
, e strumenti come jslint
avrebbe chiesto di farlo, potrebbe in realtà non essere una buona idea.
Immaginate di cambiare o rimuovere in seguito il primo ciclo in modo che non sia più i
var
. Ora il secondo ciclo rimanente cambia improvvisamente significato da una variabile locale a una globale. Se non riesci a notare quando aggiorni il primo ciclo che il secondo ciclo ha una dipendenza nascosta (e potresti benissimo non notare che dato come gli occhi elidono il pattern for(...=0 ; ...<...; ...++)
in "oh, questo è solo un iteratore standard"), hai un problema sottile e fastidioso da debugare.
Il contenuto della domanda è relativo a un esempio specifico, a cui è stata data risposta in seguito. Tuttavia, ho trovato che [questa risposta] (http://stackoverflow.com/a/12889928/983430) a una domanda simile risponde al caso generico (quando/perché ridichiarò una variabile JavaScript da usare?) Chiesto nel titolo di la tua domanda davvero bene. –