JavaScriptLección 12 de 16
Closures
Una función de JavaScript recuerda las variables del lugar donde se creó, incluso cuando la función exterior ya terminó. Eso es un closure (clausura): una forma de dar a una función su propia memoria privada.
Lo esencial
- Una función interior ve las variables de la exterior y conserva el acceso a ellas
- Cada llamada a la función exterior crea una memoria nueva y separada
- Desde fuera no se llega a esas variables, así que los datos quedan privados
- Una fábrica de funciones: makeGreeter("Hello") devuelve una función de saludo lista
- Contadores, cachés, once y manejadores de eventos se apoyan en closures
Ejemplo
function createCounter() { let count = 0; return () => { count += 1; return count; };} const next = createCounter();console.log(next(), next(), next()); const other = createCounter();console.log(other()); const makeGreeter = (greeting) => (name) => `${greeting}, ${name}!`;const hello = makeGreeter("Hello");console.log(hello("Max"));next recuerda su propio count y lo sube en cada llamada. other se creó aparte, así que empezó en 1. makeGreeter devolvió una función que recordó la palabra Hello.
Tarea
Cómo usar el editor⌘ Enter o Ctrl Enter ejecuta el código, ⇧ ⌘ Enter comprueba la tarea.Tab y Mayús Tab sangran la línea o la selección; Esc y luego Tab sale del editor.La comprobación compara lo que imprimió el programa con la tarea; los espacios al final de línea no cuentan.Tras dos comprobaciones fallidas puedes ver la solución. Tu código se guarda en este navegador.Completa la hucha: add(amount) suma a balance y devuelve el saldo nuevo, y total() devuelve balance. Después escribe once(fn): devuelve una función que ejecuta fn solo la primera vez. Salida: Mia: 20, Leo: 3 y From outside: undefined.
Salida
Aquí aparecerá lo que imprima el programa.