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.