En comparación con C/C ++, el bucle para ECMAScript no puede crear un contexto local.
La copia del código es la siguiente:
para (var k en {a: 1, b: 2}) {
alerta (k);
}
alerta (k); // Aunque el bucle ha terminado, la variable k todavía está en el alcance actual
En cualquier momento, las variables solo se pueden declarar utilizando la palabra clave VAR.
La declaración de asignación anterior:
a = 10;
Esto simplemente está creando una nueva propiedad para el objeto global (pero no es una variable). "No es una variable" no significa que no se pueda cambiar, sino que no se ajusta al concepto variable en la especificación de ECMAScript, por lo que "no es una variable" (la razón por la cual puede convertirse en una propiedad de un objeto global es completamente porque existe un objeto global en JavaScript. Tal operación no es declarar una variable, sino agregar una propiedad a la propiedad global a el objeto global.
Veamos un ejemplo simple para ilustrar el problema
La copia del código es la siguiente:
if (! ("a" en la ventana)) {
var a = 1;
}
alerta (a);
En primer lugar, todas las variables globales son propiedades de la ventana, y la declaración var a = 1; es equivalente a la ventana. A = 1;
Puede usar el siguiente método para detectar si la variable global se declara
"Nombre variable" en la ventana
En segundo lugar, todas las declaraciones variables están en la parte superior del alcance del alcance, mire un ejemplo similar:
La copia del código es la siguiente:
alerta ("A" en la ventana);
var a;
En este momento, aunque la declaración es después de la alerta, la alerta sigue siendo cierta, porque el motor JavaScript primero barrerá todas las declaraciones variables y luego moverá estas declaraciones variables a la parte superior. El efecto del código final es el siguiente:
La copia del código es la siguiente:
var a;
alerta ("A" en la ventana);
En tercer lugar, debe comprender el significado de la pregunta es que la declaración variable está avanzada, pero la asignación de variable no lo hace, porque esta línea de código incluye la declaración variable y la asignación de variables.
Puede dividir la declaración en el siguiente código:
La copia del código es la siguiente:
var a; // Declaración
a = 1; // Inicializar la asignación
Entonces, para resumir, cuando la declaración y la asignación variables se usan juntos, el motor JavaScript lo dividirá automáticamente en dos partes para avanzar en la declaración variable. El paso de asignación no es avanzado porque puede afectar la ejecución del código y lograr resultados inesperados.
El código en la pregunta es equivalente a:
La copia del código es la siguiente:
var a;
if (! ("a" en la ventana)) {
a = 1;
}
alerta (a);
De acuerdo con el análisis del ejemplo anterior, si se declara la variable, debe agregar VAR antes de la variable local declarada. Si la variable global declarada, no puede agregar VAR (es mejor limitar el número de variables globales e intentar usar variables locales)
Lo siguiente describe varias características de usar var
El uso de una declaración VAR para declarar una variable varias veces no solo es legal, sino que tampoco causa ningún error.
Si una declaración reutilizada tiene un valor inicial, solo sirve como una declaración de asignación.
Si una declaración reutilizada no tiene un valor inicial, no tendrá ningún efecto en la variable original.
Las variables sin declaraciones de VAR existen como variables globales; Las variables con declaraciones VAR pertenecen a variables locales, especialmente las funciones interiores. Y, después de la prueba, es más rápido declarar con VAR que no con VAR. Establezca tantas variables locales como sea posible en la función, que es segura y rápida, y las operaciones variables son más razonables, y no habrá errores lógicos causados por la operación aleatoria de variables globales en la función.
Es mejor usar el propio método cara a cara del objeto al declarar un objeto, ya que esta velocidad es mucho más rápida que el nuevo método.
El nombre de la variable se toma por usted mismo. Para ocuparse de la semántica y las especificaciones, el nombre de la variable puede ser un poco más largo, pero tenga cuidado, la longitud del nombre de la variable también afectará la velocidad de ejecución del código. Las largas declaraciones de nombre de variable no son tan rápidas como cortas.