Avatar ·

Como funcionam as closures em JavaScript? Explique com um exemplo simples

Olá a todos! Comecei a estudar JavaScript e não consigo entender o tema das closures. Li vários artigos, mas ainda fico confuso.\n\nPor exemplo, aqui está um código:\n\n
function counter() {\n    let count = 0;\n    return function() {\n        count++;\n        return count;\n    };\n}\n\nconst myCounter = counter();\nconsole.log(myCounter()); // 1\nconsole.log(myCounter()); // 2\nconsole.log(myCounter()); // 3
\n\nPor que a variável count não é reiniciada toda vez? Afinal, a função counter() já terminou sua execução, mas ainda podemos modificar sua variável interna. Eu esperava que após a primeira chamada de myCounter() a variável count fosse destruída, já que foi declarada dentro da função.\n\nE outra pergunta: para que servem as closures? Em quais situações reais elas são úteis?