Escopo de variáveis e constantes

JScript possui três escopos: global, local e a classe. Se você declarar uma variável ou constante fora de uma definição de função ou classe, é uma variável global e seu valor é acessível e modificável em todo o programa. Se você declarar uma variável dentro de uma definição de função, essa variável é local. Ele é criado e destruído toda vez que a função é executada; não pode ser acessado de fora da função. Se você declarar uma variável dentro de uma definição de classe, que a variável está disponível dentro da classe, e não pode ser acessado diretamente a partir do escopo global. Para obter mais informações, consulte Objetos baseados em classe.

Discussão

Linguagens como C++ também têm o "escopo de bloco; qualquer conjunto de chaves ({}) define um novo escopo. JScript não oferece suporte a escopos de bloco.

Uma variável local pode ter o mesmo nome de uma variável global, mas é totalmente distinta e separada. Conseqüentemente, a alteração do valor de uma variável não tem efeito sobre o outro. Dentro da função na qual a variável local é declarada, somente a versão local tem significado. Isso é conhecido como visibilidade.

// 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.");

A saída deste programa mostra que uma variável local pode ser modificada sem alterar o valor da variável global. As alterações a variável global de dentro da função afetam o valor no escopo global.

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

Desde JScript processa as declarações de variáveis e constantes antes de executar qualquer código, não importa se a declaração é dentro de um bloco condicional ou alguma outra construção. Depois que o JScript descobriu-se a todas as variáveis e constantes, ele executa o código na função. Isso significa que o valor de uma constante local é indefinido, até que a instrução de declaração de constante seja atingida e que uma variável local é indefinida, até que a variável é atribuída para a função.

Às vezes, isso resulta em comportamentos inesperados. Considere o seguinte programa.

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());

Esta saída deste programa é:

aNumber is undefined and anotherNumber is undefined

Você pode esperar que aNumber seria 100 ou 123 e que anotherNumber seria 200 ou 42, mas os dois valores são indefinido. Desde que ambos aNumber e anotherNumber são definidos com escopo local, eles sombra a variável global e a constante com o mesmo nome. Desde que o código que inicializa a variável local e a constante nunca é executado, seus valores são indefinido.

Declaração de variável explícita é necessária no modo rápido. Quando o modo rápido estiver desativado, a declaração de variável implícita é necessária. Uma variável declarada implicitamente dentro de uma função — ou seja, aquele que aparece no lado esquerdo de uma expressão de atribuição sem a palavra-chave var — é uma variável global.

Consulte também

Conceitos

Valores indefinidos

Outros recursos

Constantes e variáveis de JScript