Mira el siguiente código:
La copia del código es la siguiente:
if (! ("aa" en la ventana)) {
alerta ('Dios mío');
var aa = 1;
}
alerta ("aa" en la ventana);
alerta (aa);
Responda las siguientes preguntas:
¿Se informará un error? ¿Cuántas veces aparecerá?
¿La segunda alerta es verdadera o falsa?
¿Qué aparece en la tercera alerta?
¿Por qué?
Piénselo y luego pruebelo. Si responde correctamente, no necesita leer los siguientes artículos.
-----------------------------
Definir variables en JS es demasiado simple. Puedes usar un var o incluso sin var:
La copia del código es la siguiente:
var a = 1;
Aquí A es el nombre de la variable y 1 es el valor variable. Por desgracia, esto es demasiado básico. Mira el siguiente código:
La copia del código es la siguiente:
var a;
alerta (a);
En la prueba de Firebug, Undefined aparecerá. Esta es una cadena muy familiar, que parece indicar que la variable no está definida. Pero creo que ya lo he variado, esta es la definición, pero no hay valor adjunto.
Hagamos algo que está realmente indefinido:
La copia del código es la siguiente:
alerta (a);
Así es, solo alerta a una variable que nunca ha aparecido en absoluto. ¿Qué pasará?
Firebug informó directamente un error: A no está definido. Significa que A no está definido. Combinando el código anterior, esto es confuso. ¿Cuál es la diferencia entre esto indefinido y el anterior indefinido?
De hecho, el código anterior es equivalente a esto:
La copia del código es la siguiente:
var a = indefinido;
alerta (a);
En otras palabras, cuando se declara una variable sin asignar un valor, JS pasará un valor indefinido a la variable. Tenga en cuenta que este es un "valor", lo que significa que A ya tiene un valor, y este valor se llama "indefinido".
Las variables detrás de la alerta directa nunca han aparecido, lo que significa que este es el verdadero indefinido.
En pocas palabras: no hay variable sin un valor en JS, y el valor se asigna cuando se declara la variable.
Luego miramos el siguiente código:
La copia del código es la siguiente:
alerta (a);
var a = 1;
¿Este código informará un error? Porque cuando la alerta está alerta, la variable A aún no ha aparecido.
Pero no hay error de esta manera, pero aparece un valor indefinido. Indica que la variable A ya existe, pero el valor no es lo que queremos, sino que está indefinido. ¿Cuál es el problema?
Debido a que la declaración de variable var es la misma que la declaración de función, se avanzará, de hecho, el código anterior se ve así:
La copia del código es la siguiente:
var a;
alerta (a);
a = 1;
De esta manera lo entenderás.
Por lo tanto, la clave de este problema es: la declaración VAR alcanzará la parte superior del alcance por adelantado, pero el valor adjunto no será: una configuración muy enredada, no sé por qué hice esto. Personalmente creo que esto es un defecto de JS.
Hay un hábito de código ahora que aboga por poner declaraciones variables frente al alcance, probablemente teniendo en cuenta esto, incluso si no las escribe al frente, JS continuará con anticipación.
Ahora déjame publicar la respuesta a la pregunta al comienzo del artículo:
Solo aparecerán dos alertas, y la alerta en si no se ejecutará, porque la declaración de VAR se avanzó, el código real se ve así:
La copia del código es la siguiente:
var aa;
if (! ("aa" en la ventana)) {
alerta ('Dios mío');
aa = 1;
}
alerta ("aa" en la ventana);
alerta (aa);
Aunque AA está vacío, será cierto cuando se juzgue por 'AA' en la ventana, porque existen y el valor no está definido. Entonces, si el código no se ejecuta. No hablaré de las dos últimas alertas.
Personalmente, siento que esta es una pregunta muy sin sentido. Deberíamos entender sus razones, pero despreciarlo como una trampa.
La pregunta anterior es también la razón por la que escribí este artículo. Vi este código de un artículo en línea, pero no hay respuesta. No pude golpear a mi hermana, así que fui a Stackoverflow y pedí averiguarlo. La respuesta es este artículo.
¡Pero esta es una pregunta muy básica, en realidad! ! !
Jaja, perdóname, hay otra pregunta:
La copia del código es la siguiente:
var b = {}
alerta (B.AA);
alerta (B.AA.BB);
Esta también es una forma de declarar variables. Entonces, ¿este código informará un error? ¿Por qué?