Estou em contato com o JavaScript há muito tempo e, toda vez que entendo os fechamentos, estou procurando trabalho no front-end da web recentemente, então preciso consolidar a fundação.
Este artigo se refere ao fechamento do blog de Joy_Lee com base em seu blog e se esforça para explicar meu entendimento na forma de comentários. Se houver alguma inadequação, a crítica e a correção são bem -vindas.
Na programação avançada, isso é dito: quando outras funções são definidas dentro de uma função, um fechamento é criado. O fechamento tem permissão para acessar todas as variáveis contidas na função.
(Como você entende essa frase? De acordo com esta frase, um fechamento é uma função aninhada! Uma função aninhada pode, obviamente, acessar as variáveis da função que a contém, e não há problema.)
De um modo geral, as funções internas podem acessar variáveis no nível anterior ou mesmo nos níveis globais. Portanto, algumas pessoas entendem isso: através do fechamento, o acesso externo a variáveis dentro da função local pode ser alcançado.
(If we simply divide the scope into one level, suppose the global scope as the first level, where the defined function body internal scope is the second level, and the defined function body internal scope is nested within the second level scope as the third level, etc. In traditional sense, the first level cannot access the second level variable (this variable is called local variable), and the second level cannot access the third level,..., and vice versa, which is the scope chain. The scope cannot be found No escopo deste nível e depois pesquisou o nível anterior até o primeiro nível do mecanismo de fechamento. O mecanismo de coleta de lixo GC para não reciclar os recursos ocupados por essa cadeia.
função a () {var i = 0; função b () {alert (++ i); } retornar b; } var c = a (); c ();Ou seja, a função do fechamento é que, depois que A é executado e devolvido, o fechamento faz com que o mecanismo de coleta de lixo JavaScript GC não recupere os recursos ocupados por A, porque a execução de uma função interna B de A precisa depender das variáveis em a.
Devido à existência do fechamento, após a função A retorna, eu sempre existe. Dessa forma, toda vez que C () é executado, eu é o valor de I alertado após adicionar 1.
Então, se A não retornar a função B, a situação será completamente diferente. Como depois que A é executado, B não é devolvido ao mundo exterior de A, mas é referenciado apenas por A e, neste momento, A será referenciado apenas por B, portanto as funções A e B são referenciadas uma pela outra, mas não serão perturbadas pelo mundo exterior (referido pelo mundo exterior), as funções A e B serão recicladas pelo GC.
De fato, é o fechamento que estende o ciclo de vida da variável. Geralmente, o escopo de uma função, ou seja, variáveis, será destruído após a execução da função, mas quando a função retornar um fechamento, desde que o fechamento não seja liberado, toda a cadeia de escopo ocupará memória. (Os fechamentos estendem o ciclo de vida de uma variável, que se refere ao caso de ser referenciado no primeiro nível. Mas sem essa referência, os fechamentos ainda podem ser chamados de fechamento?)
Falando em cadeia de escopo: isto é, o escopo da função, o escopo da função da camada anterior ... e o escopo global. Ao acessar uma variável, se você não tiver, procure camadas por camada até o mundo inteiro. Se você ainda não o tiver, você relatará um erro.
(Eu realmente quero reclamar que a cadeia de escopo do fechamento é curva.)
PS: Alguns internautas recomendaram outro artigo para analisar o conceito de fechamento de JavaScript . É autoritário? Finalmente, há um conceito claro:
Tendo dito tanto, o que exatamente é um fechamento? Vamos resumir abaixo:
O fechamento é um conceito que descreve um fenômeno no qual a memória reside após a execução da função ser liberada. Desde que você compreenda esse conceito central, os fechamentos não são difíceis de entender.
O artigo acima permite entender os fechamentos em uma frase (simples e fácil de entender) é 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.