No hay absolutamente ninguna diferencia en significado o rendimiento, en JavaScript o ActionScript.
var
es una directiva para el analizador, y no un comando ejecutado en tiempo de ejecución. Si un identificador particular se ha declarado var
una vez o más en cualquier parte del cuerpo de una función (*), todo uso de ese identificador en el bloque se referirá a la variable local. No importa si value
se declara que está var
dentro del bucle, fuera del bucle o ambos.
En consecuencia, debe escribir lo que le resulte más legible. No estoy de acuerdo con Crockford en que poner todos los vars en la parte superior de una función siempre es lo mejor. Para el caso en el que una variable se usa temporalmente en una sección de código, es mejor declarar var
en esa sección, por lo que la sección es independiente y se puede copiar y pegar. De lo contrario, copie y pegue unas pocas líneas de código en una nueva función durante la refactorización, sin seleccionar y mover por separado lo asociado var
, y obtendrá un global accidental.
En particular:
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
Crockford le recomendará que elimine el segundo var
(o elimine ambos var
sy haga lo var i;
anterior), y jslint se quejará de esto. Pero en mi opinión, es más var
fácil mantener ambos s, manteniendo todo el código relacionado juntos, en lugar de tener un bit de código adicional y fácil de olvidar en la parte superior de la función.
Personalmente, tiendo a declarar como var
la primera asignación de una variable en una sección de código independiente, si hay otro uso separado del mismo nombre de variable en alguna otra parte de la misma función. Para mí, tener que declarar var
es una verruga JS indeseable (hubiera sido mejor tener las variables predeterminadas a locales); No veo como mi deber duplicar las limitaciones de [una revisión anterior de] ANSI C en JavaScript también.
(*: excepto en cuerpos de funciones anidadas)