Sobes.tech
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