Compartir a través de


Ámbito de variables y constantes

JScript tiene tres ámbitos: global, local y clase. Si se declara una variable o una constante fuera de la definición de una función o clase, la variable será global y su valor, accesible y modificable desde el programa. Si se declara dentro de la definición de una función, será local y se creará y se destruirá cada vez que se ejecute la función, por lo que no se podrá tener acceso a ella fuera de la función. Si declara una variable dentro de una definición de clase, la variable estará disponible dentro de la clase y no será accesible directamente en el ámbito global. Para obtener más información, vea Objetos basados en clases.

Explicación

Los lenguajes como C++ también tienen "ámbito de bloque"; cualquier conjunto de llaves ({}) define un ámbito nuevo. JScript no admite ámbitos de bloque.

Una variable local puede tener el mismo nombre que una variable global, pero es totalmente distinta e independiente. En consecuencia, si se cambia el valor de una variable no se producirá ningún efecto sobre la otra. Dentro de la función en la que se declara la variable local sólo tiene significado la versión local. Esto se conoce como visibilidad.

// Define two global variables.
var name : String = "Frank";
var age : int = "34";

function georgeNameAge() {
   var name : String; // Define a local variable.
   name = "George";   // Modify the local variable.
   age = 42;          // Modify the global variable.
   print(name + " is " + age + " years old.");
}

print(name + " is " + age + " years old.");
georgeNameAge();
print(name + " is " + age + " years old.");

El resultado de este programa muestra una variable local que se puede modificar sin cambiar el valor de la variable global. Si la variable global se cambia desde dentro de la función afecta al valor en el ámbito global.

Frank is 34 years old.
George is 42 years old.
Frank is 42 years old.

JScript procesa las declaraciones de variables y constantes antes de ejecutar cualquier código, por lo que es irrelevante que la declaración se encuentre dentro de un bloque condicional o de alguna otra construcción. Una vez que JScript encuentra todas las variables y constantes, ejecuta el código en la función. Esto significa que el valor de una constante local no se define hasta que se alcanza la instrucción de declaración de la constante; y que una variable local no se define hasta que se asigna la variable en la función.

Por este motivo en ocasiones se producen resultados inesperados. Considere el programa siguiente:

var aNumber = 100;
var anotherNumber = 200;
function tweak() {
   var s = "aNumber is " + aNumber + " and ";
   s += "anotherNumber is " + anotherNumber + "\n";
   return s;
   if (false)  {
      var aNumber;                // This statement is never executed.
      aNumber = 123;              // This statement is never executed.
      const anotherNumber = 42;   // This statement is never executed.
   } // End of the conditional.
} // End of the function definition.

print(tweak());

El resultado de este programa es:

aNumber is undefined and anotherNumber is undefined

Podría pensarse que aNumber puede ser 100 o 123 y que anotherNumber puede ser 200 o 42, pero los dos valores son del tipo undefined. Como aNumber y anotherNumber se han definido con ámbito local, prevalecen sobre la variable o constante global del mismo nombre. Puesto que el código que inicializa la variable o constante global no se ejecuta nunca, sus valores son del tipo undefined.

La declaración de variable explícita es obligatoria en modo rápido. Si se desactiva el modo rápido, se requiere la declaración de variable implícita. Una variable declarada implícitamente dentro de una función (es decir, la que aparece en el lado izquierdo de una expresión de asignación sin la palabra clave var) es una variable global.

Vea también

Conceptos

Valores no definidos

Otros recursos

Variables y constantes de JScript