Closure en castellano puede significar* clausura o cierre*, yo me siento mas cómodo llamándolo closure por lo tanto me referiré a esto siempre así.

Los Closures vienen a ser funciones anónimas, que podemos definir como parámetros de otras funciones o dentro de variables. La diferencia que tienen comparándolas con las funciones convencionales es su forma de declararlas, y que carecen de nombre.

Por ejemplo podemos usarla en una variable, para luego pasarle parámetros a esa variable como si fuera una función:

Esto imprimirá en pantalla “El coche era un opel de color azul”. Puede que para los que vengáis de* javascript* esto os resulte facilisimo, dado que es un concepto muy común en ese lenguaje.

 Si podemos usar funciones como variables, lo lógico seria que podamos pasar una variable que contenga una función como parámetro de otra función, algo así seria totalmente valido:

 Aunque nada de esto es muy útil desde mi punto de vista, al menos no en estas situaciones donde podríamos usar tranquilamente una función común, pero donde pasan a ser muy útiles los closures son cuando los usamos como callbacks, no hay que confundir callback con closure, son conceptos diferentes, la confusión radica en que los closures se usan comúnmente como callbacks. Aquí un ejemplo sacado de php.net:

 Si quisiéramos tener un callback en una función propia, un método simple podría ser este:

Como vemos primero se ejecuta el cuerpo de la función, y acto seguido el closure que hemos pasado como parámetro de nuestra función.

Vamos a complicarlo un poco más, por ejemplo que acepte parámetros de nuestra función:

Quizás pueda parecernos un lío todo esto, pero es cuestión de practicar y encontrar situaciones en las que sea de utilidad usar callbacks. Pero aun podemos, por ejemplo, definir un callback fijo en una función propia, con fijo me refiero a que no lo pasemos como parámetro, si no que este ya definido en la función, esto tiene su utilidad cuando queremos que se haga siempre la misma acción:

Este ultimo ejemplo imprimiría siempre “Mi nombre es: Nazarí—– Yo soy el callback que conoce tu nombre: Nazarí y tu edad: 26”.

Creo que hoy me he extendido demasiado, pero pienso que el concepto ha quedado claro, en caso de que tengas alguna duda deja un comentario, así aprenderemos juntos!