Closure
Relaciona-se ao conceito de escopo. Escopo refere-se ao "mundo" em que uma função "vive" e, portanto, consegue enxergar seus elementos.
// Este arquivo representa o Estado.
const x = 3
function cidade() {
const x = 97
function bairro(n) {
return x + n
}
return bairro
}
// Não funciona: bairro está fora do escopo Estado.
// console.log(bairro(5))
// Funciona: cidade está dentro do escopo Estado.
console.log(cidade()(5))
module.exports = cidade()
102
Closure é qunado uma função "lembra" de seu escopo léxico, ou seja, o mundo em que ela foi definida/escrita. Logo, mesmo que a função seja executada fora desse escopo léxico, ela irá priorizar suas "origens".
// Arquivo que representa um novo Estado.
const bairro = require('./principios10_closureEscopo')
const x = 1000
// O valor de x acima não influencia
// porque o bairro "lembra" de suas origens
console.log(bairro(10))
107