Comparado com C/C ++, o loop for no ECMAScript não pode criar um contexto local.
A cópia do código é a seguinte:
for (var k em {a: 1, b: 2}) {
alerta (k);
}
alerta (k); // Embora o loop tenha terminado, a variável k ainda está no escopo atual
A qualquer momento, as variáveis só podem ser declaradas usando a palavra -chave var.
A declaração de atribuição acima:
a = 10;
Isso está simplesmente criando uma nova propriedade para o objeto global (mas não é uma variável). "Não é uma variável" não significa que ela não pode ser alterada, mas significa que não está em conformidade com o conceito variável na especificação do Ecmascript, portanto, "não é uma variável" (a razão pela qual ele pode se tornar uma propriedade de um objeto global é inteiramente porque existe um objeto global em Javscript. Essa operação não é declarar uma variável, mas adicionar uma propriedade a um imóvel a um imóvel global.
Vamos ver um exemplo simples para ilustrar o problema
A cópia do código é a seguinte:
if (! ("A" na janela)) {
var a = 1;
}
alerta (a);
Primeiro de tudo, todas as variáveis globais são propriedades da janela e a declaração var a = 1; é equivalente a janela.a = 1;
Você pode usar o seguinte método para detectar se a variável global é declarada
"Nome da variável" na janela
Segundo, todas as declarações variáveis estão no topo do escopo do escopo, veja um exemplo semelhante:
A cópia do código é a seguinte:
alerta ("a" na janela);
var a;
Nesse momento, embora a declaração seja após o alerta, o alerta aparece ainda é verdadeiro, porque o mecanismo JavaScript irá primeiro varrer todas as declarações variáveis e depois moverá essas declarações variáveis para o topo. O efeito do código final é o seguinte:
A cópia do código é a seguinte:
var a;
alerta ("a" na janela);
Terceiro, você precisa entender o significado da questão é que a declaração variável é avançada, mas a atribuição da variável não, porque essa linha de código inclui a declaração variável e a atribuição de variáveis.
Você pode dividir a declaração no seguinte código:
A cópia do código é a seguinte:
var a; // Declaração
a = 1; // inicialize a atribuição
Portanto, para resumir, quando a declaração e a atribuição variáveis são usadas juntas, o mecanismo JavaScript o divide automaticamente em duas partes para avançar a declaração variável. A etapa da atribuição não é avançada porque pode afetar a execução do código e obter resultados inesperados.
O código da questão é equivalente a:
A cópia do código é a seguinte:
var a;
if (! ("A" na janela)) {
a = 1;
}
alerta (a);
De acordo com a análise do exemplo acima, se a variável for declarada, você deverá adicionar VAR antes da variável local declarada. Se a variável global declarada, você não poderá adicionar var (é melhor limitar o número de variáveis globais e tentar usar variáveis locais)
A seguir, descreve vários recursos de usar VAR
O uso de uma instrução VAR para declarar uma variável várias vezes não é apenas legal, mas também não causa erros.
Se uma declaração reutilizada tiver um valor inicial, ele serve apenas como uma declaração de atribuição.
Se uma declaração reutilizada não tiver um valor inicial, ela não terá nenhum efeito na variável original.
Variáveis sem declarações VAR existem como variáveis globais; Variáveis com declarações VAR pertencem a variáveis locais, especialmente funções internas. E, após o teste, é mais rápido declarar com var do que não com var. Defina o maior número possível de variáveis locais na função, que é segura e rápida, e as operações variáveis são mais razoáveis, e não haverá erros lógicos causados pela operação aleatória de variáveis globais na função.
É melhor usar o método presencial do objeto ao declarar um objeto, pois essa velocidade é muito mais rápida que o novo método.
O nome da variável é tomado por você mesmo. Para cuidar de semântica e especificações, o nome da variável pode ser um pouco mais longo, mas tenha cuidado, o comprimento do nome da variável também afetará a velocidade de execução do código. As declarações de nomes de variáveis longas não são tão rápidas quanto curtas.