Funciones y Lógicamiércoles, 21 de enero de 2026

Closures

Funciones con memoria.

Publicidad

Apoya a JS Fruggal visitando a nuestros patrocinadores.

Un closure (cierre) es cuando una función "recuerda" su alcance léxico incluso cuando esa función se ejecuta fuera de ese alcance. Es el secreto de la privacidad de datos en JavaScript.

La Analogía de la Mochila

Imagina que una función es un Excursionista.
Cuando el Excursionista sale de casa (la función externa), empaca una Mochila (Closure).
Ponen todas las variables que necesitan de casa en esa mochila.
Incluso si la casa se quema (la función externa termina), el Excursionista todavía tiene su mochila con las variables seguras dentro.

El Patrón "Cuenta Bancaria"

En muchos lenguajes, tienes variables private. En JS, usamos Closures. Esta es una Pregunta Clásica de Entrevista para Senior.

function crearCuentaBancaria(saldoInicial) {
  // Esta variable es PRIVADA. 
  // Nadie puede acceder a ella directamente desde fuera.
  let saldo = saldoInicial;

  return {
    depositar: (cantidad) => {
      saldo += cantidad;
      return `Depositado ${cantidad}. Nuevo Saldo: ${saldo}`;
    },
    retirar: (cantidad) => {
      if (cantidad > saldo) return "Fondos insuficientes";
      saldo -= cantidad;
      return `Retirado ${cantidad}. Nuevo Saldo: ${saldo}`;
    },
    // No devolvemos la variable 'saldo', así que permanece oculta.
    verSaldo: () => saldo
  };
}

const miCuenta = crearCuentaBancaria(100);

console.log(miCuenta.depositar(50)); // 150
console.log(miCuenta.saldo);         // undefined (¡No se puede tocar!)
console.log(miCuenta.verSaldo());    // 150 (Debes pedirlo amablemente)

¿Por qué esto es pro?

Si saldo fuera una variable global, cualquier parte de tu código podría establecerla accidentalmente en 0. Al usar un closure, garantizas que el saldo solo puede cambiarse usando las reglas depositar y retirar que creaste.

Publicidad

Apoya a JS Fruggal visitando a nuestros patrocinadores.