Junior
¿En qué consiste la diferencia entre un cierre y un ámbito?
sobes.tech AI
Respuesta de la IA
El cierre es una función que recuerda el entorno (ámbito léxico) en el que fue creada, incluso si se ejecuta fuera de ese entorno. Esto le permite acceder a variables del ámbito padre.
El ámbito es la zona del programa donde una variable o función es visible y accesible. En JavaScript existen ámbitos global, funcional y de bloque.
Diferencia principal:
- Ámbito determina dónde una variable o función está disponible durante la compilación (o análisis).
- Cierre permite a una función mantener acceso a variables de su ámbito de creación después de que ese ámbito haya finalizado su ejecución.
Ejemplo de ámbito:
// Ámbito global
let globalVar = "Soy global";
function miFuncion() {
// Ámbito funcional
let functionVar = "Soy funcional";
console.log(globalVar); // Disponible
}
// console.log(functionVar); // Error ReferenceError: functionVar no definido
Ejemplo de cierre:
function crearContador() {
let count = 0; // Variable en el ámbito de crearContador
return function() { // Esto es un cierre
count++; // Tiene acceso a count desde el ámbito padre
console.log(count);
};
}
const contador = crearContador();
contador(); // Imprime 1 (count se mantiene)
contador(); // Imprime 2 (count se mantiene)
// console.log(count); // Error ReferenceError: count no definido
En este ejemplo, la función interna (cierre) mantiene acceso a la variable count, incluso después de que crearContador terminó su ejecución. Esto es posible gracias al cierre.
Comparación:
| Característica | Ámbito | Cierre |
|---|---|---|
| Qué determina | Dónde las variables y funciones están disponibles | Cómo una función mantiene acceso a variables del ámbito padre |
| Cuándo está activo | Durante la compilación (entorno léxico) | Durante la ejecución de la función creada en otro ámbito |
| Relación | El cierre depende del ámbito en el que fue creado | El ámbito es un concepto fundamental para determinar la accesibilidad |