O ambiente de execução define outros dados que variáveis ou funções têm permissão para acessar e determina seu respectivo comportamento. Cada ambiente de execução possui um objeto variável associado a ele.
O ambiente de execução global é o ambiente de execução mais periférico. Dependendo do ambiente do host em que a implementação do JavaScript está localizada, os objetos que representam o ambiente de execução também são diferentes. Em um navegador da Web, o ambiente de execução global é considerado um objeto de janela. Portanto, todas as variáveis e funções globais são criadas como propriedades e métodos de objetos de janela.
Objeto variável: todas as variáveis e funções definidas no ambiente são armazenadas nesse objeto.
Cadeia de escopo: quando o código é executado em um ambiente, uma cadeia de objetos variáveis é criada. O objetivo da cadeia de escopo é garantir o acesso ordenado a todas as variáveis e funções que têm permissão para acessar o ambiente de execução. A extremidade frontal da cadeia do escopo é sempre um objeto variável no ambiente em que o código atualmente executado está localizado.
Objeto ativo: o objeto ativo contém apenas uma variável no início, ou seja, o objeto de argumentos. O próximo objeto variável na cadeia de escopo vem do ambiente de inclusão (externo) e o próximo objeto variável vem do próximo ambiente de inclusão. Isso continua até o ambiente de execução global; Os objetos variáveis do ambiente de execução global são sempre o último objeto na cadeia de escopo.
Avaliação do identificador: A análise do identificador é um processo de busca de identificadores um por um ao longo da cadeia de escopo. O processo de pesquisa sempre começa na extremidade frontal da corrente do escopo e depois volta passo a passo até que o identificador seja encontrado.
Código de exemplo:
var color = "azul"; função chanGecolor () {if (color ==== "azul") {color = "vermelho"; } else {color = "azul"; }} chanGecolor (); alert ("cor agora é" + cor);A cadeia de escopo da função ChanGecolor () contém dois objetos: seu próprio objeto variável (que define o objeto de argumentos) e um objeto variável de variáveis globais. A cor variável pode ser acessada dentro da função, pois pode ser encontrada nessa cadeia de escopo.
Além disso, variáveis definidas nos escopos locais podem ser usadas de forma intercambiável com variáveis globais em um ambiente local, exemplo:
var color = "azul"; função chanGecolor () {var outrocolor = "vermelho"; função swapcolors () {var tempcolor = outrocolor; outrocolor = cor; cor = tempcolor; // Você pode acessar a cor, outra corporação e tempcolor aqui} // Você pode acessar a cor e outra coragem aqui, mas não pode acessar o tempcolor swapcolors ();} // você pode acessar apenas o colorChangeColor ();O código acima envolve 3 ambientes de execução: o ambiente global, o ambiente de manipulação de ChanGecolor () e o ambiente local de swapcolors ().
Existe uma cor variável e uma função ChanGecolor () na variável global. A variável local de ChanGecolor () contém uma função variável de outra e uma função swapcolors (), que pode acessar a cor na variável global. Existe um tempcolor variável na variável local de swapcolors (). Em SwapColors (), você pode acessar a cor na variável global ou na outra variável de cola, porque esses dois ambientes são seu ambiente de execução pai. A cadeia de escopo do exemplo acima é:
Entre eles, o ambiente interno pode acessar todos os ambientes externos através da cadeia de escopo, mas o ambiente externo não pode acessar variáveis e funções no ambiente interno . As conexões entre as variáveis de ambiente são lineares e seqüenciais. Cada variável pode procurar apenas a cadeia de escopo do superior para consultar a variável e o nome da função, ou seja, consulte a variável ou o nome da função nesta função e, se não for consultado na corrente de escopo anterior até o escopo superior. No entanto, nenhum ambiente pode pesquisar na cadeia de escopo e entrar em outro ambiente de execução.
Os parâmetros da função também são tratados como variáveis, portanto suas regras de acesso são as mesmas que outras variáveis no ambiente de execução.
1. Estenda a corrente de escopo
A cadeia de escopo é estendida quando o fluxo de execução entra em qualquer uma das seguintes declarações:
• Catch bloco de declaração de tentativa
• Com declaração
Essas duas declarações adicionarão um objeto variável à extremidade frontal do escopo.
Para a declaração com com a variável especificada é adicionada à cadeia de escopo. Para a declaração de captura, um novo objeto variável é criado, que contém a declaração do objeto errado que está sendo jogado.
Por exemplo:
function BuildUrl () {var qs = "? Debug = true"; com (localização) {var url = href + qs; } retornar url;}A instrução with recebe um objeto de localização; portanto, seu objeto variável contém as propriedades e métodos usados pelo objeto de localização, e esse objeto variável é adicionado à extremidade frontal da cadeia do escopo. Ao se referir à variável href na instrução com (na verdade, referindo -se ao local.href), ela pode ser encontrada na variável de ambiente atual. Ao se referir à variável QS, a variável definida em BuildUrl () é referenciada, localizada no objeto Variável do ambiente de função. Quanto à instrução com com, uma variável denominada URL é definida, de modo que o URL se torna parte do ambiente de execução da função e pode ser retornado como o valor da função.
2. Sem escopo no nível do bloco
Em JavaScript, os aparelhos encaracolados fechados não têm um escopo próprio. Veja o seguinte código:
if (true) {var color = "azul";} alerta (cor); // "azul"No JavaScript, a declaração variável criada pela instrução IF/for adiciona a variável ao ambiente de execução atual. Por exemplo:
for (var i = 0; i <10; i ++) {Dosomething (i);} alerta (i); // 10Reciclagem de lixo
Semelhante ao Java, o JavaScript também possui um mecanismo automático de reciclagem de lixo. O ambiente de execução é responsável por gerenciar a memória usada durante a execução do código. Ao escrever programas, não há necessidade de problemas de uso de memória relacionados. A alocação da memória necessária e a reciclagem da memória inútil estão totalmente implementadas. O princípio do mecanismo de coleta de lixo é: descubra variáveis que não são mais usadas e liberam a memória que ocupa. Para fazer isso, o coletor de lixo executará esta operação periodicamente em um intervalo de tempo fixo (ou um tempo de coleta predeterminado durante a execução do código).
Antes de fazer a coleta de lixo, você deve determinar se o recurso é inútil e marcar variáveis que não são mais usadas para reciclar sua memória no futuro. Geralmente, existem duas implementações de estratégias para identificar variáveis inúteis.
1 Marque claro
A maneira mais comum de coleta de lixo em JavaScript é a limpeza de marcadores. Quando uma variável entra no ambiente, ela é marcada como "entre no ambiente"; Quando uma variável deixa o ambiente, ela é marcada como "Saia do ambiente". Quando o coletor de lixo é executado, marca todas as variáveis usadas. Em seguida, ele remove as tags de variáveis no ambiente e as variáveis referenciadas por variáveis no ambiente. Depois disso, as variáveis marcadas serão consideradas variáveis prontas para serem excluídas. Finalmente, o coletor de lixo completa o trabalho de limpeza da memória, destrói os valores marcados e recicla o espaço de memória que eles ocupam.
2. Contagem de referência
A contagem de referência refere -se ao número de vezes que cada valor é referenciado. Quando uma variável é declarada e um valor de tipo de referência é atribuído à variável, o número de referências a esse valor será 1. Se o mesmo valor for atribuído a outra variável, o número de referências ao valor é aumentado em 1. Por outro lado, se a variável contém a referência a essa variável, que não se refere a essa variável que não é reduzida por 1. Seu espaço de memória pode ser recuperado. Na próxima vez que o coletor de lixo executar, ele recicla a memória ocupada por esses valores com zero referências.
Um problema que a contagem de referência pode causar referências recicladas. Por exemplo:
função problemas () {var obja = new Object (); var objb = new Object (); obja.beroteroBJ = objb; objb.beroterobj = obja;}No exemplo acima, Obja e OBJB se referem um ao outro por meio de atributos. Após a conclusão da execução da função, Obja e Objb continuarão a existir e sua contagem de referência não será 0. Essa situação fará com que a memória ocupada por Obja e Objb seja reciclada.
O artigo acima fala brevemente sobre JavaScript: Ambiente de execução, escopo e coleta de lixo são todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.