Ir al contenido principal

Destacado

Node | Debug nestjs app en vscode

Recientemente me encontré trabajando en un proyecto basado en nestjs y una cosa que me sorprendió fue la cantidad de console.log distribuidos por todo el repositorio, señal de que el equipo lo usaba como su principal forma de depurar. Un poco old school para mí gusto para ser sincero, así que, ¿Por qué no usar vscode a tu favor? La siguiente configuración ademas de correr la app,  enlaza  el debugger al proceso node. En MacOS:   Ejecutar > Agregar configuración... Listo, ya podemos poner breakpoints en donde lo requiramos, sencillo no? C you space cowboy!

Javascript | Closures 0.1

 Los closures son uno de los conceptos fundamentales en javascript y entenderlos nos permitirá escribir código más flexible y eficiente.


¿Qué es un closure?

Un closure no es mas que una función que tiene acceso al scope léxico en la que se definió, aún cuando dicha función se invoque fuera de ese scope.

Pero antes demos 2 pasos hacia atrás...

¿Qué es el scope?

El scope o contexto define el alcance y visibilidad de las variables, funciones y otros recursos dentro de nuestro código.

Existen 3 tipos de scopes: el scope global, el scope de función y el scope de bloque.


Scope Global:

  • Las variables declaradas fuera de cualquier función o bloque tienen un scope global.
  • Son visibles desde cualquier parte del código.

Scope de Función:

  • Las variables declaradas dentro de una función solo son accesibles dentro de esa misma función.
  • No son visibles desde fuera de la función.

Scope de Bloque:

  • Las variables declaradas con let o const dentro de un bloque solo son visibles dentro de ese bloque.


Ahora que ya tenemos claro que es un scope, prosigamos con el scope léxico.

¿Que es el scope léxico?

El scope léxico o estático hace referencia a la lugar/posición, dentro del código fuente, en donde las variables o funciones son declaradas.



En base a lo anterior podemos entonces interpretar que un closure es una función que tiene acceso al scope en el cual fue declarada (scope léxico), incluso cuando se ejecute en otro contexto.

Ejemplo de Closure:

  • La función anónima que es retornada, es un closure, que tiene acceso a la variable value definida dentro del scope de tick.
  • Cuando tick es invocada, devuelve una referencia a la función anónima
  • La variable ticker guarda la referencia a la función anónima y al scope léxico en la cual fue creada, lo que le permite acceder a value y modificar su valor. 
  • Nota que incluso después de que tick ha terminado de ejecutarse, es posible modificar el valor de value invocando la función anónima dentro de ticker.

En general los closures son una herramienta a considerar y son utiles a la hora de crear funciones privadas, encapsular datos o incluso mantener estados internos, sin embargo, hay que tener cuidado al usarlos ya que podríamos incurrir en problemas de memoria o agregar complejidad innecesaria a nuestro código.

Nada que un poco de práctica no pueda resolver...



C you space cowboy!

Comentarios

Entradas populares