Js escopo é detalhado e contexto de execução de objeto ativo é explicado em detalhes, Xiaobai pode entender!

Deixe-me mostrar algumas linhas de código primeiro;
var demo = "ian";
função fuc () {
console.log (demo); // resultado: ian
}
fuc ();

Obviamente, fuc () imprime a demonstração em todo o mundo, o seguinte enfoca o princípio da análise;

Primeiro, entenda um termo chamado Contexto de Execução (Contexto de Exceção) e algumas pessoas o chamam de contexto de execução. O ambiente de execução contém todas as variáveis ​​e nomes de funções de uma função (global). Sempre que a função começa a executar, é gerado um ambiente de execução, que é destruído quando todo o código é executado (o ambiente global é destruído após a saída do programa).

Ao criar o ambiente de execução, o escopo da cadeia de escopos será criado e os diferentes escopos serão vinculados pela cadeia de escopos ; após a criação do ambiente de execução, esses argumentos (que não existem globalmente) serão usados ​​para criar o objeto ativo. O front end da cadeia de escopo (0) é sempre o objeto de função atual (o ambiente de execução global é janela) e o valor do atributo no escopo da cadeia de escopo subseqüente;
a função acima fornece uma castanha:
Insira a descrição da imagem aqui

De volta à pergunta original: não há variável de demonstração no escopo da função divertida (scop [0]), mas ela continuará pesquisando elementos ao longo da cadeia de escopos e encontrando a demonstração no escopo global (scop [1]) E imprima, o resultado é "ian";

AO - objeto de ativação

O objeto ativo gerado imediatamente antes da execução da função; consulte o seguinte trecho de código
console.log (x);
var x = 5;

// resultado: indefinido;

fuc1 ();
função fuc1 () {
var a = 1;
console.log (a);
console.log (b);
var b = 2;
console.log (b);
}

// resultado: 1 indefinido

As duas perguntas acima têm a fórmula de resumo do professor: promoção da declaração variável e promoção geral da declaração da função. Vejamos o princípio abaixo:
AO (globalmente chamado GO) será gerado toda vez que a função for executada Siga estas etapas
1. Crie um objeto AO;
2. Encontre declarações de variáveis ​​e parâmetros formais, com nomes de variáveis ​​/ nomes paramétricos como objetos AO A propriedade, o valor da propriedade é indefinido
3. Os parâmetros formais são unificados
4. Encontre a declaração da função; o nome da função é a propriedade do objeto AO, o valor da propriedade é indefinido
Use a função acima para fornecer uma castanha:

1. Primeiro, crie o objeto
AO AO {}

2. Encontre declarações de variáveis ​​e parâmetros formais,
AO {a: não definido;
b: não definido
} // Neste exemplo, apenas as variáveis ​​aeb não têm parâmetros formais

3. Unificação de parâmetros formais
AO {a: não definido;
b: não definido
} // Como não há parâmetros reais neste exemplo, não há alterações após esta etapa em comparação com as anteriores

4 Encontre a declaração da função
AO {a: undifined;
b: undifined
}
// A função neste exemplo não declara uma nova função

Em seguida, comece a executar o código na função de cima para baixo, de acordo com as regras do JS.
Primeiro, execute a = 1; * Nota: aqui divida var a = 1 em var a; a = 1; a variável acabou de ser declarada, então aqui Só precisa atribuir o valor a ok;

Após a execução, o AO é: {
a: 1;
b: undifined
}

Continue executando o console.log (a); imprima a // result: 1
e execute console.log (b); // result: undefined e
execute b = 2:
AO é: {
a: 1;
b: 2;
}

Em seguida, execute console.log (b); // result: 2

O autor também é um novato que está apenas começando, há alguns lugares onde a redação não é rigorosa, por favor, tenha paciência comigo

@author: JFlyhak
@email: [email protected]

Publicado 3 artigos originais · Gostei5 · Visitas168

Acho que você gosta

Origin blog.csdn.net/qq_44621394/article/details/90245635
Recomendado
Clasificación