Junior
Qual é a diferença entre um encerramento e um escopo?
sobes.tech IA
Resposta da IA
O encerramento é uma função que lembra o ambiente (âmbito léxico) em que foi criada, mesmo que seja executada fora desse ambiente. Isso permite-lhe aceder a variáveis do âmbito pai.
O âmbito é a área do programa onde uma variável ou função é visível e acessível. Em JavaScript, existem âmbito global, funcional e de bloco.
Diferença principal:
- Âmbito determina onde uma variável ou função está disponível durante a compilação (ou análise).
- Encerramento permite a uma função manter acesso às variáveis do seu âmbito de criação depois de esse âmbito ter terminado a sua execução.
Exemplo de âmbito:
// Âmbito global
let globalVar = "Sou global";
function minhaFuncao() {
// Âmbito funcional
let functionVar = "Sou funcional";
console.log(globalVar); // Disponível
}
// console.log(functionVar); // Erro ReferenceError: functionVar não definido
Exemplo de encerramento:
function criarContador() {
let count = 0; // Variável no âmbito de criarContador
return function() { // Isto é um encerramento
count++; // Tem acesso a count do âmbito pai
console.log(count);
};
}
const contador = criarContador();
contador(); // Imprime 1 (count mantém-se)
contador(); // Imprime 2 (count mantém-se)
// console.log(count); // Erro ReferenceError: count não definido
Neste exemplo, a função interna (encerramento) mantém o acesso à variável count, mesmo após criarContador ter terminado a sua execução. Isto é possível graças ao encerramento.
Comparação:
| Característica | Âmbito | Encerramento |
|---|---|---|
| O que determina | Onde as variáveis e funções estão disponíveis | Como uma função mantém o acesso às variáveis do âmbito pai |
| Quando está ativo | Durante a compilação (ambiente léxico) | Durante a execução da função criada noutra área de âmbito |
| Relação | O encerramento depende do âmbito em que foi criado | O âmbito é um conceito fundamental para determinar a acessibilidade |