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:

javascriptfunction 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.