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 está acessível e modificável em todo o seu programa.Se você declarar uma variável dentro de uma definição de função, essa variável é local.Ele é criado e destruído a cada vez que a função é executada; não possa ser acessado de fora da função.Se você declarar uma variável dentro de uma definição de classe, essa variável está disponível dentro da classe e não pode ser acessado diretamente do escopo global.Para obter mais informações, consulte Objetos com base em classe.
Discussão
Idiomas sistema autônomo C++ também têm "bloquear escopo"; qualquer conjunto de chaves ({}) define um novo escopo.JScript não dá 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 Outros.Dentro da função na qual a variável local é declarada, somente a versão local tem significado.Isso é conhecido sistema autônomo 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 para 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.
Como o JScript processa as declarações de variáveis e constante antes de executar qualquer código, não importa se a declaração é dentro de um bloco condicional ou alguma Outros construção.Depois de JScript encontrou todas as variáveis e constantes, ele executa o código na função.Isso significa que o valor de uma constante local está indefinido até que a demonstrativo de demonstrativo de constante seja atingida e que uma variável local é indefinida até que a variável seja atribuída a na função.
Às vezes, isso resultados 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 não definido.Desde que ambas aNumber e anotherNumber são definidos com escopo local, sombrear a variável global e constante com o mesmo nome. Como o código que inicializa a variável local e a constante nunca é executado, seus valores são não definido.
Declaração de variável explícita é necessária em modo rápido.Quando o modo rápido estiver desativado, declaração de variável implícita é necessária.Uma variável declarada implicitamente dentro de uma função — ou seja, uma que aparece à esquerda de uma expressão de atribuição sem a palavra-chave var — é uma variável global.