Non c'è assolutamente alcuna differenza nel significato o nelle prestazioni, in JavaScript o ActionScript.
var
è una direttiva per il parser e non un comando eseguito in fase di esecuzione. Se un determinato identificatore è stato dichiarato var
una o più volte in un punto qualsiasi di un corpo di funzione (*), allora tutti gli usi di tale identificativo nel blocco si riferiranno alla variabile locale. Non fa alcuna differenza se value
viene dichiaratovar
all'interno del loop, all'esterno del loop o in entrambi.
Di conseguenza dovresti scrivere quello che ritieni più leggibile. Non sono d'accordo con Crockford sul fatto che mettere tutti i vars in cima a una funzione sia sempre la cosa migliore. Nel caso in cui una variabile venga utilizzata temporaneamente in una sezione di codice, è meglio dichiararla var
in quella sezione, in modo che la sezione rimanga sola e possa essere incollata. Altrimenti, copia e incolla alcune righe di codice in una nuova funzione durante il refactoring, senza selezionare e spostare separatamente il associato var
e avrai un globale accidentale.
In particolare:
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
Crockford ti consiglierà di rimuovere il secondo var
(o di rimuovere entrambi var
i passaggi var i;
precedenti), e jslint ti farà rabbia. Ma l'IMO è più mantenibile per mantenere entrambivar
i messaggi, mantenendo insieme tutto il codice correlato, invece di avere un bit di codice aggiuntivo, facilmente dimenticabile nella parte superiore della funzione.
Personalmente tendo a dichiarare come var
la prima assegnazione di una variabile in una sezione indipendente di codice, indipendentemente dal fatto che ci sia un altro uso separato dello stesso nome di variabile in qualche altra parte della stessa funzione. Per me, dover dichiarare var
affatto è una verruca JS indesiderabile (sarebbe stato meglio avere le variabili predefinite in locale); Non vedo come mio dovere duplicare i limiti di [una vecchia revisione di] ANSI C anche in JavaScript.
(*: diverso dai corpi funzione nidificati)