Hoy, un pequeño pasante en la compañía me preguntó la diferencia entre dos códigos JS:
Código 1:
<script type = "text/javaScript"> var a = "hello"; función test () {var a; alerta (a); a = "mundo"; alerta (a); } </script>Código 2:
<script type = "text/javaScript"> var a = "hello"; función test () {alerta (a); a = "mundo"; alerta (a); } </script>Creo que es tan simple. ¿No es solo un problema de alcance entre las variables globales y las variables locales? I said: "When the global variable is duplicated with the local variable, the scope of the local variable will overwrite the scope of the global variable. After leaving the scope of the local variable, it will return to the scope of the global variable. So the results of the two codes running are: 1) undefined World 2) Hello World. Then I randomly compiled the following example for her:
<script> var a = 1; función test () {alerta (a); var a = 2; alerta (a); } prueba(); alerta (a); </script>¿Cuál es el resultado del resultado? ¿Es salida 1 2 1? Bueno, pensé que antes de enviarle el caso de prueba, pero después de la salida de la prueba ... el resultado de correr estaba indefinido 2 1. En ese momento, estaba desconcertado y le pregunté al maestro Gu que me di cuenta de que no sabía mucho sobre JS, así que trabajé duro para aprender + prueba, y lo resumí de la siguiente manera:
1. El alcance de las variables de JavaScript se divide de acuerdo con los bloques de método (es decir, se divide por un par de aparatos {} de función). Recuerde, es un bloque de funciones, y para, mientras, y si los bloques no son los criterios de división de alcance. Puede echar un vistazo a los siguientes ejemplos:
<script> function test2 () {alert ("antes para alcance:"+i); // No se me asigna un valor (¡no sin declarar! Use variables o funciones no declaradas para lanzar un error fatal e interrumpir la ejecución del script) // en este momento el valor de I está subfinado para (var i = 0; i <3; i ++) {alerta ("en el alcance:"+i); // i es 0, 1, 2, y cuando tengo 3 años, el bucle se salta} alerta ("Después de alcance:"+i); // i es 3, tenga en cuenta que ya está afuera para el alcance, pero todavía me conservan como 3 mientras (verdadero) {var j = 1; romper; } alerta (j); // j es 1, tenga en cuenta que ya está activado mientras está fuera del alcance, el valor de j permanece en 1 if (verdadero) {var k = 1; } alerta (k); // El valor de k es 1. Tenga en cuenta que ya está fuera de alcance, pero el valor de k permanece en 1} test2 (); // if (alcance de la función exterior) La salida de las variables I, J y K que solo existen en Test2 tendrán un efecto mágico? alerta (i); //¡error! Así es, es un error, porque la variable I no se declara (no se está asignando, distinguiendo la salida de la primera línea de la función Test2), lo que resulta en un error de script, ¡y el programa termina aquí! alerta ("¿Se imprimirá esta línea?"); // no ejecutado alerta (j); // no ejecutado alerta (k); // no ejecutado </script>2. Antes de la ejecución, JavaScript realizará un análisis completo de la parte de la declaración de todo el archivo de script (incluidas las variables locales) para determinar el alcance de las variables reales. ¿Cómo entender? Vea el siguiente ejemplo:
<script> var a = 1; función test () {alerta (a); // a no está indefinido! Esta A no es una variable global, porque se ha declarado una variable local duplicada en el alcance de la función (la cuarta última línea del cuerpo de funciones) y // La variable global A está sobrescribida, que muestra que JavaScript realizará un análisis completo de la parte de definición de todo el archivo de script antes de la ejecución. Por lo tanto, antes de que se ejecute la prueba de función (), // la variable A en el cuerpo de la función apunta a la variable local interna en lugar de la variable global externa. Pero en este momento A solo se declara y no ha asignado un valor, por lo que genera indefinido. a = 4 alerta (a); // a es 4, ¿no hay suspenso? ¡El A aquí sigue siendo una variable local! var a; // La variable local A declara alerta (a); // a todavía es 4, porque 4 se ha asignado a A antes} test (); alerta (a); // a es 1, que no está en el alcance de la función, el valor de A es el valor de la variable global </script>3. Cuando la variable global se duplica con la variable local, el alcance de la variable local sobrescribirá el alcance de la variable global. Después de dejar el alcance de la variable local, vuelve al alcance de la variable global. Cuando la variable global encuentra una variable local, ¿cómo usar la variable global? Use Window.GlobalVariablename.
<script> var a = 1; función test () {alert (window.a); // A es 1, ¡aquí A es una variable global! var a = 2; // La variable local A se define en esta alerta de línea (a); // a es 2, y A aquí es una variable local! } prueba(); alerta (a); // a es 1, no está en el alcance de la función, el valor de A es el valor de la variable global </script>Por supuesto, para más artículos, consulte los artículos relacionados a continuación.