O escopo de uma variável refere-se à visibilidade da variável, enquanto o ciclo de vida (período de sobrevivência) examina a variável de outra perspectiva.
O escopo das variáveis em JS é dividido em variáveis globais e variáveis locais. Aquelas definidas dentro da função são chamadas de variáveis locais, e aquelas definidas fora da função são chamadas de variáveis globais. ("Coisas fora de uma função são chamadas de variáveis globais" são relativas. A premissa discutida aqui é que variáveis explicitamente declaradas com var. Variáveis definidas sem var dentro de uma função são variáveis globais por padrão. É claro que declarar variáveis sem var é desaprovado. ).
Copie o código do código da seguinte forma:
var glob = 4; //Declara variáveis globais fora da função
função diversão() {
var height = 20; //A declaração var na função é uma variável local
peso = 50; //Aquelas declaradas sem var na função são variáveis globais
}
diversão();
alerta(peso);
Não há escopo em nível de bloco em JS, que é colocado entre chaves {}. Existe em Java. Escreva o seguinte código no método principal
Copie o código do código da seguinte forma:
public static void main(String...args) {
for(int i=0;i<5;i++) {
}
{
intj=10;
}
intz = 20;
System.out.println(i); // i não está visível, será reportado um erro durante a análise de sintaxe, ou seja, a compilação não passará
System.out.println(j); // j não está visível e um erro será relatado durante a análise de sintaxe, ou seja, a compilação não será aprovada.
System.out.println(z); // z está visível, saída 20
}
Mas se em JS
Copie o código do código da seguinte forma:
for(var i=0;i<5;i++) {
}
var obj = {nome:"Lily"};
for(var attr em obj) {
}
{
varj=10;
}
alert(i); //Saída 4, sem escopo em nível de bloco
alert(attr); //Nome da saída, sem escopo em nível de bloco
alert(j);//Saída 10, sem escopo em nível de bloco
Isso também ilustra um problema. Evite usar loops for ao declarar variáveis no escopo global, caso contrário, causará poluição no escopo de nomenclatura global.
Obviamente, JS1.7 propôs a palavra-chave let para declarar variáveis (consulte https://developer.mozilla.org/cn/New_in_JavaScript_1.7), que se aplica apenas ao escopo da instrução for.
Copie o código do código da seguinte forma:
for(seja i=0;i<5;i++) {
//pendência
}
alert(i);//Ocorre um erro durante a execução, indicando que i não está definido
JS1.7 precisa ser referenciado assim <script type="application/javascript;version=1.7"/></script>
ps: firefox2+ implementa JS1.7