Não há absolutamente nenhuma diferença em significado ou desempenho, em JavaScript ou ActionScript.
var
é uma diretiva para o analisador e não um comando executado em tempo de execução. Se um identificador específico tiver sido declarado var
uma ou mais vezes em qualquer lugar do corpo da função (*), todo o uso desse identificador no bloco estará se referindo à variável local. Não faz diferença se value
é declarado var
dentro do loop, fora do loop ou em ambos.
Consequentemente, você deve escrever o que achar mais legível. Discordo de Crockford de que colocar todos os vars no topo de uma função é sempre a melhor coisa. No caso em que uma variável é usada temporariamente em uma seção do código, é melhor declarar var
nessa seção, para que a seção fique sozinha e possa ser copiada e colada. Caso contrário, copie e cole algumas linhas de código em uma nova função durante a refatoração, sem selecionar e mover separadamente o associado var
, e você terá um mundo acidental.
Em particular:
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
Crockford recomendará que você remova o segundo var
(ou remova ambosvar
e faça var i;
acima), e o jslint o fará querer isso. Mas, na IMO, é mais sustentável manter os dois var
s, mantendo todo o código relacionado unido, em vez de ter um trecho extra de código facilmente esquecido na parte superior da função.
Pessoalmente, tenho a tendência de declarar var
a primeira atribuição de uma variável em uma seção independente de código, se existe ou não outro uso separado do mesmo nome de variável em alguma outra parte da mesma função. Para mim, ter que declarar var
é uma verruga JS indesejável (seria melhor ter variáveis padrão para local); Não vejo como meu dever duplicar as limitações de [uma antiga revisão do] ANSI C em JavaScript também.
(*: exceto em corpos de função aninhados)