Cierre

Los Cierres son uno de los mas importantes, y a menudo menos entendidos conceptos en Javascript. No lo cubrire en detalle aqui, a cambio puede dirigirse al titulo Scope & Closures. Quiero decir algunas cosas acerca de el para que entienda el concepto general. Sera uno de las mas importantes tecnicas en su Javascript skillset.

Usted puede ver un cierre como una manera de "recordar" y continuar accediendo al ambito de la funcion (sus variables) incluso una vez la funcion halla terminado de ejecutarse.

function makeAdder(x) {
    // parametro `x` es una variable interna

    // funcion interna `add()` usa `x`, asi que
    // tiene un "cierre/closure" sobre ella.
    function add(y) {
        return y + x;
    };

    return add;
}

La referencia a la funcion interna add( .. ) que se obtiene retornada con cada llamada a la funcion externa makeAdder( .. ) es capaz de recordar cualquier valor que sea pasado a x en makeAdder( .. ). Ahora, vamos a usar makeAdder( .. ):

// `plusOne`obtine una referencia de  la funcion 
// `add(..)` con un cierre sobre el parametro `x` de
// la funcion externa `makeAdder(..)`
var plusOne = makeAdder( 1 );

// `plusOne`obtine una referencia de  la funcion 
// `add(..)` con un cierre sobre el parametro `x` de
// la funcion externa `makeAdder(..)`
var plusTen = makeAdder( 10 );

plusOne( 3 );        // 4  <-- 1 + 3
plusOne( 41 );        // 42 <-- 1 + 41

plusTen( 13 );        // 23 <-- 10 + 13

Mas de como este codigo trabaja:

  1. Cuando llamamos makeAdder(1), obtenemos una referencia a la funcion interna add() que recuerda x como 1. Llamamos esta referencia a la funcion plusOne(..).
  2. Cuando llamamos makeAdder(10), obtenemos otra referencia a la funcion interna add() que recuerda x como 10. Llamamos esta referencia a la funcion plusTen(..).
  3. Cuando llamamos plusOne(3), esta agrega 3 (su interna y) a el 1 (recordada por x), y obtenemos 4 como resultado.
  4. Cuando llamamos plusTen(13), esta agrega 13 (su y interna) a el 10 (recordada por x), y obtenemos 23 como resultado.

No se preocupe si esto le perece extraño y confuso a la primera -- lo puede ser! Tomara mucha practica entenderlo totalmente.

Pero creame, una vez lo entienda, sera una de las mas potentes y utiles tecnicas en toda la programacion. Definitivamente vale la pena dejar que su cerebro se cocine a fuego lento con los cierres por un momento. En la siguiente seccion, tendremos un poco mas de practica con los cierres/clousure.

results matching ""

    No results matching ""