Avatar ·

Como funcionam as closures em JavaScript? Explique com exemplos

Olá a todos! Comecei a estudar JavaScript e não consigo entender o tópico de closures. Li muitos artigos, mas ainda fico confuso. \n\nAqui está um exemplo que me confunde. Crio uma função que retorna outra função:\n\n```javascript\nfunction createCounter() {\n let count = 0;\n return function() {\n count++;\n return count;\n };\n}\n\nconst counter1 = createCounter();\nconst counter2 = createCounter();\n\nconsole.log(counter1()); // 1\nconsole.log(counter1()); // 2\nconsole.log(counter2()); // 1 — por que não 3?\n```\n\nPor que `counter1` e `counter2` se comportam como contadores separados? Eu pensei que a variável `count` seria compartilhada. E como o JavaScript "lembra" o valor de `count` depois que a função `createCounter` termina sua execução? Normalmente, variáveis locais são...