martes, 24 de marzo de 2009

Funciones Lambda

Despues de mi post de closures sentí que debería haber explicado un poco de funciones lambda antes y su funcionalidad, el nombre lambda viene del calculo lambda que es una teoría matematica tan complicada que excede el alcance de este post, este blog y este autor asi que les dejo la tarea de investigación a ustedes.
Basicamente son funciones sin nombre, pero en javascript esto tiene mucha mayor profundidad, ya que lo que sucede en realidad es que EN JAVASCRIPT TODO ES UN OBJETO y me gustaría que eso quede claro por eso lo voy a repetir EN JAVASCRIPT TODO ES UN OBJETO , entonces hasta las funciones son objetos.
Por tanto es indistinto escribir cualquiera de las dos declaraciones de funciones siguientes.

function FuncX(){
return "x";
}

var FuncY = function (){
return "y";
}


de esta forma podemos ver que podemos asignar una funcion a una variable y siempre que declaramos funciones implicitamente estamos declarando variables con el nombre de la funcion.

para ver esto llevado al extremo podemos ver el siguiente ejemplo

var funcRec = function(){
return function(){
return funcRec();
}
}

alert(funcRec()()()()()()()()()()()()); // que devuelve????


a decir verdad esto es muy simple. la funcion funcRec devuelve una funcion (lambda) anonima, que al ser ejecutada devuelve el valor de la llamada a funcRec.
entonces

funcRec() //devuelve una funcion que al ser ejecutada devolverá el valor de ejecutar funcRec()
funcRec()()// ejecuta la funcion devuelta por la primer ejecucion, la cual devuelve exactamente lo mismo


confuso verdad, bueno espero que lo lean muchas veces hasta que lo entiendan. Les dejo algo más elaborado para ver si les sirve.


var a=0;
var funcRec = function(){

alert("a=" + a);
return function(){
a+=1;
return funcRec();
}
}

alert(funcRec()()());

1 comentario: