El alcance de una variable se refiere a la visibilidad de la variable, mientras que el ciclo de vida (período de supervivencia) examina la variable desde otra perspectiva.
El alcance de las variables en JS se divide en variables globales y variables locales. Las definidas dentro de la función se denominan variables locales y las definidas fuera de la función se denominan variables globales. ("Las cosas fuera de una función se llaman variables globales" son relativas. La premisa discutida aquí es que las variables declaradas explícitamente con var. Las variables definidas sin var dentro de una función son variables globales de forma predeterminada. Por supuesto, declarar variables sin var está mal visto. ).
Copie el código de código de la siguiente manera:
var glob = 4; //Declarar variables globales fuera de la función
función divertida() {
var height = 20; //La declaración var en la función es una variable local
peso = 50; //Las declaradas sin var en la función son variables globales
}
divertido();
alerta (peso);
No hay un alcance a nivel de bloque en JS, que está encerrado entre llaves {}. Hay en Java. Escribe el siguiente código en el método principal.
Copie el código de código de la siguiente manera:
público estático vacío principal (cadena... argumentos) {
para(int i=0;i<5;i++) {
}
{
intj=10;
}
int z = 20;
System.out.println(i); // i no es visible, se informará un error durante el análisis de sintaxis, es decir, la compilación no pasará
System.out.println(j); // j no es visible y se informará un error durante el análisis de sintaxis, es decir, la compilación no se realizará.
System.out.println(z); // z es visible, salida 20
}
Pero si en JS
Copie el código de código de la siguiente manera:
para(var i=0;i<5;i++) {
}
var obj = {nombre:"Lily"};
para (var atributo en obj) {
}
{
varj=10;
}
alert(i);//Salida 4, sin alcance a nivel de bloque
alert(attr); //Nombre de salida, sin alcance a nivel de bloque
alert(j);//Salida 10, sin alcance a nivel de bloque
Esto también ilustra un problema. Evite el uso de bucles for al declarar variables en el ámbito global, de lo contrario provocará contaminación del ámbito de denominación global.
Por supuesto, JS1.7 propuso la palabra clave let para declarar variables (consulte https://developer.mozilla.org/cn/New_in_JavaScript_1.7), que solo se aplica al alcance de la declaración for.
Copie el código de código de la siguiente manera:
for(sea i=0;i<5;i++) {
//hacer
}
alert(i);//Se produce un error al ejecutar, lo que indica que i no está definido
Se debe hacer referencia a JS1.7 de esta manera <script type="application/javascript;version=1.7"/></script>
PD: Firefox2+ implementa JS1.7