Closures em JavaScript
Vamos agora estudar o conceito de closure (closure). Na verdade, você já está familiarizado com este conceito, só falta aprender a terminologia correta.
Então, um closure é uma função junto com todas as variáveis externas que estão disponíveis para ela. Ou, em outras palavras, um closure é uma função junto com seu ambiente léxico.
Em JavaScript, na maioria das vezes, quando se diz "closure de uma função", referem-se não à própria função, mas sim às suas variáveis externas. Se alguma função obtém uma variável de seu ambiente léxico, diz-se que "a variável é obtida do closure".
Vamos lembrar o código que criamos na lição anterior:
function test() {
let num = 1;
return function() {
console.log(num);
}
}
let func = test();
func(); // exibe 1
Neste caso, podemos dizer que a função
func obtém o valor da variável
num do closure. Também podemos dizer,
que a função func armazena o valor da variável
num no closure.