Bem vindo de volta.
Neste vídeo, vamos falar sobre encerramentos.
Os fechamentos são um dos conceitos mais desafiantes para envolver a cabeça.
Mas uma vez que você realmente entende o que a definição é e eu vi alguns
deles, será muito mais fácil.
Então, o que vamos fazer neste vídeo.
Vamos entender o que é um fechamento e o que não é.
Vamos usar fechamentos para emular variáveis ​​privadas.
Vamos listar alguns casos de uso para fechamentos no mundo real.
Então, o que é um encerramento.
Um fechamento é uma função que faz uso de variáveis ​​definidas em funções externas que
retornaram anteriormente.
Então eu sei que essa definição pode não ter muito sentido agora.
Então, vejamos um exemplo imediatamente.
Vou pressionar a opção de comando Jay e abrir minhas ferramentas de desenvolvimento do Chrome.
é uma função que faz uso de variáveis ​​definidas em nossas funções bem então vamos fazer uma função externa.
Agora, se dissermos que um fechamento
Então, vou fazer uma função chamada externa interna desta função, uma variável chamada dados que é igual à seqüência
de caracteres.
Os fechamentos são um interior da função externa.
Vou retornar uma nova função chamada Inner e dentro desta função interna ou criar uma variável chamada dados internos
e os dados internos são iguais à string.
Impressionante.
Agora, dentro dessa função interna, eu vou retornar os fechamentos de cordas estão com a corda.
Impressionante.
Agora vamos chamar essa função externa.
E o que deveria retornar para nós.
Bem, vai retornar a definição da função interna.
Mas observe aqui que dentro dessa função interna estou fazendo uso de uma variável chamada dados
que foi definida na função externa.
Então, quando chamo essa função externa e chamo a função interna imediatamente, ela retorna a string.
Os fechamentos são incríveis.
Então, você pode realmente não ver o poder dos fechamentos no momento, mas este é apenas um bom
exemplo de usar variáveis ​​definidas em funções externas como essa variável de dados aqui dentro de uma função interna.
Quando a função externa já retornou a nota aqui, a função externa é retornada,
mas ainda posso usar essa variável de dados mesmo que a função externa já tenha retornado.
Vejamos outro exemplo.
Por aqui, eu tenho uma função chamada Outer que aceita um parâmetro A e retorna uma
função chamada Inner que leva um parâmetro b.
A que foi definida na função externa e pelo tempo que se chama que a função externa retornou.
A função interna está fazendo uso da variável
Então, esta função interna é um fechamento, como o outro exemplo que vimos algumas coisas a serem observadas
aqui.
Temos que devolver a função interna para que isso funcione e também temos a capacidade de chamar
a função externa e, em seguida, chamar imediatamente a função interna ou armazenar o resultado da função
interna em uma variável e chamá-lo mais tarde, o que geralmente fazemos.
Vamos tentar um exercício rápido.
Veja se você pode descobrir se qualquer uma dessas funções contém um vídeo de quebra-cabeça de encerramento por um segundo.
Tudo bem, o que você criou nesta primeira função.
Podemos ver que a função interna não está fazendo uso de nenhuma variável para encontrar em uma função
externa que retornou.
Então este aqui não contém um fechamento no segundo exemplo.
Podemos ver que a função interna está fazendo uso de uma variável chamada dados que foi definida
em uma função externa que retornou pelo tempo em que a função interna será chamada.
Então, o primeiro não é, mas o segundo é sempre voltar para a definição de um fechamento.
interna não está fazendo uso de variáveis ​​em uma função externa provavelmente não é um fechamento.
E se você ver que a função
Então, quando você usaria um fechamento.
Bem, um ótimo caso de uso para fechamentos é criar a idéia de uma variável privada em outros idiomas.
Existe suporte para variáveis ​​que não podem ser modificadas externamente, que chamamos de variáveis
​​privadas, mas em javascript não temos essa incorporada.
Felizmente, os fechamentos podem nos ajudar com isso.
Então, vamos dar uma olhada neste exemplo nas ferramentas do cromo dev em uma opção de comando de
imprensa Jagan e abrir isso e eu vou escrever uma função chamada contador e dentro desta função de contador.
Eu vou fazer uma variável chamada count para que igual a zero e dentro desta função de contador
eu vou retornar uma nova função.
Não há aviso aqui mesmo que não estou dando a esta função um nome.
Isso ocorre porque essas funções são anônimas.
Então, se eu quiser nomear esta função, posso chamar isso de algo como contar, mas não preciso.
E dentro desta função interna, vou retornar mais mais contagem.
E o motivo que eu estou fazendo mais mais aqui como um operador de prefixo é para que
a primeira vez que eu chamo isso vai até 1.
Agora eu posso definir esta função de contador para ser igual a uma variável chamada C e irei
salvar R C é igual ao contador.
Agora, o que você acha que C será quando eu dê uma olhada nisso.
Bem, como vimos antes.
Vai ser uma definição de função e se eu chamar C de novo, vou retornar a contagem incrementada
em 1.
Vamos chamá-lo novamente e novamente.
é realmente bom sobre isso é que ninguém tem acesso à contagem de variáveis ​​no escopo que estou no momento.
Mas o que
Se eu tentar acessar a contagem, vou obter uma referência dizendo que a contagem não está definida.
E uma vez que a contagem é uma variável privada, ninguém pode entrar e mudar com o
valor da contagem, começando sempre, será zero.
Pausar o vídeo e tentar copiar este exemplo no console cromado.
Isso ajudará muito com a compreensão de como os fechamentos funcionam.
Vamos dar uma olhada em outro exemplo de variáveis ​​particulares dentro desta função de sala de aula.
Eu tenho uma variável chamada instrutores que é uma matriz de duas cadeias chamado LP.
Esta função de sala de aula retorna um objeto com duas funções.
Obter instrutores e um instrutor obter instrutores me permite apenas exibir desordenado no instrutor é uma
função que leva um parâmetro e adiciona-o à matriz do instrutor.
Então, onde está encerrando o fechamento aqui.
Bem note que os instrutores GET insiram uma função de instrutor.
Ambos fazem uso da variável deste instrutor que está fora desta função aqui e esta
função aqui.
recebem instrutores e adicionam instrutor usando variáveis ​​definidas em funções externas que já retornaram.
Então, essas duas funções
Você pode ver aqui mesmo que os instrutores me permitem imprimir a matriz de Ellen colt e o instrutor me
permite adicionar um instrutor a essa matriz e retornar a teoria.
Mas quando crio uma nova sala de aula com outra variável e recebo os instrutores, podemos ver que
Ian não está aqui.
Finalmente, através do encerramento, fizemos que os instrutores variassem aqui uma variável privada.
Ninguém pode modificá-lo, sempre que uma sala de aula é criada, os instrutores que você recebe sempre
serão chamados de beco.
Então, parece que você está preso conosco por um tempo, então, embora tenhamos um pequeno
exemplo, muitas ferramentas e tecnologias que você estará aprendendo fazem uso de fechamentos um pouco.
Então, quando você está olhando para algum desse código, tente o seu melhor para ver se você pode detectar onde esses
fechamentos são.
Bem, certifique-se de apontar para você também.
Então, o que aprendemos?
Existe um fechamento quando uma função interna faz uso de variáveis ​​declaradas na função externa
que já retornou e o encerramento não existe.
Se você não retornar uma função interna e se essa função interna não faz uso de variáveis
​​retornadas por uma função externa, também vimos que podemos usar fechamentos para criar variáveis ​​privadas e
escrever um código melhor para isolar nossa lógica e nossa aplicação.
E é isso mesmo para fechamentos.
Vejo você no próximo vídeo