JScript  

Alcance de variables

Microsoft JScript tiene dos alcances: global y local. Si declara una variable fuera de la definición de una función, será una variable global y se podrá tener acceso a su valor y se podrá modificar desde todo el programa. Si declara una variable dentro de la definición de una función, esa variable será local. Se crea y se destruye cada vez que se ejecuta la función, no se tiene acceso a ella desde fuera de la función.

Lenguajes como C++ también tienen un "alcance de bloque". En este caso, cualquier conjunto de llaves "{}" define un nuevo alcance. JScript no admite alcances 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.

var unCentauro = "un caballo con jinete"; // Definición global de  unCentauro.

// Código de JScript, omitido por razones de brevedad.
function antiguedades()  // En esta función se define una variable local unCentauro.
{

// Código de JScript, omitido por razones de brevedad.
var unCentauro = "Un centauro es, probablemente, un guerrero Escita a caballo";

// Código de JScript, omitido por razones de brevedad.
   unCentauro += ", mal entendido; es decir, "; // Se suma a la variable local.

// Código de JScript, omitido por razones de brevedad.
} // Fin de la función.

var nadaEnParticular = antiguedades();
unCentauro += " tal y como es visto a cierta distancia por una persona inocente.";

/*
Dentro de la función, la variable contiene "Un centauro es, probablemente, un guerrero Escita a caballo, mal entendido, es decir, "; fuera de la función, la variable contiene el resto de la frase:
"un caballo con jinete tal y como es visto a cierta distancia por una persona inocente."
*/

Es importante tener en cuenta que las variables actúan como si se declararan al principio de cualquier alcance en el que existen. Por este motivo en ocasiones se producen resultados inesperados.

tweak();
var unNumero = 100;
function tweak()  {
    var nuevoElemento = 0;  // Declaración explícita de la variable nuevoElemento.

    // Esta instrucción asigna el valor no definido (undefined) a la variable nuevoElemento, ya que existe una variable local con el nombre unNúmero.
    nuevoElemento = unNumero;

    // La siguiente instrucción asigna el valor 42 a la variable local unNumero
    unNumero = 42;
    if (false)  {
        var unNumero;  // Esta instrucción nunca se ejecuta.
        unNumero = 123;  // Esta instrucción nunca se ejecuta.
        }  // Fin de la condición.

}  // Fin de la definición de la función.

Cuando JScript ejecuta una función, en primer lugar busca todas las declaraciones de variable,

var algunaVariable;

y crea las variables con el valor inicial undefined. Si se declara una variable con un valor,

var algunaVariable = "algo";

continuará teniendo inicialmente el valor undefined y sólo tomará el valor declarado si la línea que contiene la declaración llega a ejecutarse.

JScript procesa las declaraciones de variable 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, ejecuta el código en la función. Si una variable se declara implícitamente dentro de una función (es decir, si aparece en el lado izquierdo de una expresión de asignación pero no se ha declarado con var), se crea como una variable global.

Ayuda de Javascript y Vbscript para Javascripts.astalaweb.com.