1. A cadeia de escopo das funções JavaScript é dividida em cadeia de escopo em tempo de definição e cadeia de escopo em tempo de execução;
2. Quando uma função é definida, ela possui um atributo [[scope]] indicando sua cadeia de escopo de definição. A cadeia de escopo de definição [[scope]] segue as seguintes regras: a cadeia de escopo de definição de uma função [[ scope]] é sempre a. cadeia de escopo de execução da função externa na qual está localizada;
3. A cadeia de escopo de definição da função global contém apenas os atributos de janela;
4. Quando uma função é executada, a cadeia de escopo é sempre empurrada para o objeto ativo atual no início da cadeia de escopo quando é definida (contém isso, argumentos, parâmetros e variáveis locais);
5. Quando uma função é executada, o endereçamento das variáveis é sempre pesquisado do topo da cadeia de escopo para baixo, portanto, a velocidade de endereçamento das variáveis globais é a mais lenta;
6. Quando a função interna é executada, ele ainda pode acessar sua cadeia completa de escopo. É por isso que os encerramentos podem acessar variáveis definidas por funções externas concluídas em tempo de execução;
7. Quando uma instrução with é encontrada durante a execução da função, todos os atributos do objeto especificado com serão temporariamente colocados no topo da cadeia de escopo como o topo da cadeia de escopo;
8. Quando a execução da função encontra um catch, o objeto de erro especificado por catch será temporariamente empurrado para o topo da cadeia de escopo como o topo da cadeia de escopo;
Vamos dar um exemplo e desenhar a cadeia de escopo para aprofundar o entendimento:
Existe um trecho de código assim:
Copie o código do código da seguinte forma:
função atribuirEventos(){
var id = "xdi9592";
document.getElementById("save-btn").onclick = function(event){
salvarDocumento(id);
};
}
Chame o fechamento anônimo gerado por esta função Closure e desenhe a figura a seguir para mostrar a cadeia de escopo quando atribuiEvent é executado e a cadeia de escopo quando Closure é definido: