5 cosas que no sabía de JavaScript

Tal como he mensionado previamente, no soy experto en JS y estoy lejos de la experiencia que algunos de mis compañeros de trabajo tienen con este lenguaje de programación. Es por ello que cada vez que tengo algo de tiempo, tomo algún libro de JS o reviso algún video de cosas «básicas» porque en realidad, JS tiene muchas particularidades.

Declaración de variables con la palabra reservada Var, un pecado capital.

En principio no entendí mucho del porque si bien varios de los ejemplos y el material de estudios disponible en JS usa VAR para declarar variables, tanto mi mentor como muchos otros expertor de JS insisten en que VAR debería ser utilizado casi nunca o nunca. Esto de se debe a características de VAR que van desde el ámbito de la variable hasta el uso cotidiano en la depuración. VAR está en franca retirada y es la palabra reservada LET quien la reemplaza, con mejoras en los temas que planteo previamente.

Los archivos JS son leídos por completo ANTES de su ejecución y setea el valor de todas las variables como undefined.

¿Porqué no me deja renderizar un PDF correctamente? esa fue la pregunta por un par de horas me acompañó en un proyecto… Respuesta, cambié el ámbito de una variable (declarada con Let, obviamente… jejeje) sacándola de una función y ubicándola en la parte superior del archivo JS, después de las importaciones ¿El problema? La variable hacía referencia a otra variable que era resultado de una función matemática entre 2 argumentos de la función de la cual había sacado mi variable… Al investigar un poco más del porqué pasaba esto, además de lo lógico que es la dependencia de los parámetros y la función matemática al interior de mi función, comprendí que JS hace un barrido por todo el archivo JS y setea inicialmente todas las variables con el valor undefined. Esto va cambiando a medida que se ejecuta el archivo línea a línea.

JavaScript posee Tipado Débil

A diferencia de lenguajes como C++, Pascal, COBOL u otros, en JS no indicamos el tipo de variable al declararla. La verdadera diferencia está en el contenido asignado. Otro punto curioso es que ‘, » y ` sirven para asignar contenidos de tipo string, aun cuando ` tiene la capadidad de incorporar el contenido de otras variables como parte de la cadena string. Otra cosa curiosa es que para JS 7 y 7.5 son de tipo número, mientras en lenguajes como los indicados previamente, serían de tipo flotante o similar.

¿Qué son las Closures?

Una closure se establece cuando una función cualquiera accede a una variable fuera de su contexto. En JS una closure es creada cada vez que una función es creada y dado que este tipo de funciones pueden acceder a valores fuera de su propio contexto, el uso de closures permite crear y manejar el concepto de estado o variables privadas que pueden ser accesibles incluso cuando la función padre dejo de existir después de su invocación. Veamos el siguiente código…

Aquí tenemos la variable mensaje dentro de la función exterior. Es una variable local y no puede ser accedida desde fuera de la función, pero si desde el interior de la función en la función interior.

Cuando asignamos la función exterior a la variable foo lo que ocurre es lo siguiente:

  • La función exterior se ejecuta una vez y foo se convierte ahora en la declaración de una función (se le asigna el “valor” de lo que retorna exterior que en este caso es interior).
  • La variable foo tiene acceso a la función (closure) interior y desde ahí a la variable mensaje.

En javascript las closures son creadas con toda la información del entorno donde fueron creadas. La función foo tiene una referencia a la closure interior, la que fue creada durante la ejecución de la función exterior. La función interior (la closure) mantiene la información de su ambiente: La variable mensaje.

Template Literal, ¿una cadena de string con esteróides?

Junto con ES6, fue introducido el uso de bacsticks ( ` ) para realizar algunas funciones adicionales en una cadena de strings:

  • Permite definir strings multi linea.
  • Provee una forma sencilla de interpolar variables y expresiones dentro del string.

Veamos un simple ejemplo de uso de variable en un template literal…

Hasta las siguiente 5 cosas que nó sabía de JS…

Sat Nam!