Closures
Las closures son una parte vital del paradigma de Programación Funcional asi que vamos a darle una pequeña mirada a este concepto para aclarar las cosas un poco. Una closure es cuando definimos una funcion esta tiene acceso a las variables del entorno donde fue definida. Aun si la ejecución de ese entorno finalizó. Veamos un ejemplo porque estoy seguro que nadie entendio nada ja.
como pueden ver en este simple ejemplo definimos una función dentro de otra sin embargo podemos ver que la funcion inner tiene acceso a la variable e que fue definida fuera de la funcion.
entonces si llamamos la funcion
ahora veamos a que me refiero con que no importa si la funcion outter ya finalizó su ejecución.
como podemos ver este ejemplo es aun más complicado pero nos permite reflejar el hecho de que en Javascript todo es un objeto, hasta las funciones son objetos y como las funciones pueden recibir objetos como parametros, y pueden devolver objetos, entonces tambien pueden recibir funciones y devolver funciones.
Veamos como utilizariamos esto
allí podemos ver que la funcion func (declarada dentro de crearFuncion) puede seguir utilizando las variables a,b,c (declarados dentro de crearFuncion) aún despues de que la ejecución de crearFuncion haya terminado.
eso son closures!
function outer(c, d) {
var e = c * d;
function inner(a, b) {
return (e * a) + b;
}
return inner(2, 1);
}
como pueden ver en este simple ejemplo definimos una función dentro de otra sin embargo podemos ver que la funcion inner tiene acceso a la variable e que fue definida fuera de la funcion.
entonces si llamamos la funcion
outer(3,2) // returns 13
ahora veamos a que me refiero con que no importa si la funcion outter ya finalizó su ejecución.
function crearFuncion(c){
var a=3;
var b=4;
var func = function(x){
return a*b*c*x;
}
return func;
}
como podemos ver este ejemplo es aun más complicado pero nos permite reflejar el hecho de que en Javascript todo es un objeto, hasta las funciones son objetos y como las funciones pueden recibir objetos como parametros, y pueden devolver objetos, entonces tambien pueden recibir funciones y devolver funciones.
Veamos como utilizariamos esto
var f = crearFuncion(2);
alert(f(5)) // alerts 120 ( = 2*3*4*5)
// que ocurriría si hiciesemos ...
alert(crearFuncion(2)(5))
allí podemos ver que la funcion func (declarada dentro de crearFuncion) puede seguir utilizando las variables a,b,c (declarados dentro de crearFuncion) aún despues de que la ejecución de crearFuncion haya terminado.
eso son closures!
no se entendio ni michi
ResponderEliminarGenial Gracias :D
ResponderEliminar