JavaScript de Cero a Experto / Funciones
Closures: la mochila de la función
Aquí está uno de los conceptos más famosos —y temidos— de JavaScript: los closures. Suena místico, pero es una idea simple con consecuencias enormes: una función puede RECORDAR las variables del lugar donde nació, incluso después de que ese lugar ya terminó. Es la base de patrones que usarás toda tu carrera. Con la analogía correcta, lo vas a entender de una vez.
La mochila que la función se lleva
El contador con memoria privada
El ejemplo clásico: una fábrica que crea contadores, cada uno con su propia cuenta guardada:
crearContador declara cuenta y devuelve una función que la usa. Aunque
crearContador YA TERMINÓ, la función devuelta sigue recordando su cuenta
(la lleva en la mochila) y la actualiza en cada llamada. Y cada contador que
creas tiene su propia cuenta privada: contador y otro no se pisan. Nadie
desde afuera puede tocar cuenta directamente — está encerrada en el closure.
Para qué sirve
crearContador() declara 'let cuenta = 0' y devuelve una función que hace cuenta++. Llamas const c = crearContador() y luego c() tres veces. ¿Por qué c() devuelve 1, 2, 3 y no siempre 1?
Mini-reto
En "Mi Bolsillo": escribe una fábrica function crearBolsillo(saldoInicial)
que guarde el saldo en su mochila y devuelva una función gastar(monto) que
reste del saldo y devuelva el saldo restante. Crea dos bolsillos con saldos
distintos y comprueba que son independientes (gastar en uno no afecta al
otro). Acabas de crear estado privado — la base de la programación orientada
a objetos que verás en el módulo 11.
Qué sigue
Cierras la teoría de funciones con dos comportamientos que debes conocer para no llevarte sorpresas: el HOISTING (por qué algunas funciones se pueden usar antes de declararlas) y las IIFE (funciones que se ejecutan a sí mismas al instante). La próxima lección, antes del reto del módulo.