JavaScript, llamado cariñosamente JS, es el lenguaje más popular y utilizado en el mundo de la web, junto con HTML y CSS. Se utiliza principalmente en los navegadores web para añadir interactividad a nuestras páginas o aplicaciones. De hecho, los navegadores son su lugar natural, y cualquiera de ellos —que incluya un motor— JavaScript puede ejecutarlo.

Pero, además de jugar un rol clave en los navegadores, también se utiliza fuera de ellos para escribir código del lado del servidor —con herramientas como NodeJS, Bun o Deno— o para desarrollar aplicaciones nativas en equipos de escritorio y dispositivos móviles —usando Electron o React Native—.

"Cualquier aplicación que pueda escribirse en JavaScript, acabará escribiéndose en JavaScript". —Jeff Atwood, cofundador de StackOverflow

Su nombre puede hacernos pensar que está relacionado con Java, como si fuera un hermano menor con poderes reducidos, sin embargo, esto es sólo una confusión derivada justamente de la elección del nombre: cuando JavaScript se lanzó, allá por 1996, el equipo de desarrollo iba a nombrarlo LiveScript, pero en el intento de capitalizar la fama que estaba tomando Java se decidió el cambio de nombre.

<aside> ⚠️ No debemos confundir JavaScript con el lenguaje Java. Aunque sus nombres se parecen, los dos lenguajes de programación tienen sintaxis, semántica y usos muy diferentes.

</aside>

Gracias a que JavaScript es tan utilizado e importante en la web actual, existen muchísimos recursos disponibles que nos facilitan aprender las nociones básicas. Y, si ya sabemos programar, veremos que hay muchos conceptos que ya conocemos.

Pero primero lo primero. Definamos a JavaScript:

JavaScript es un lenguaje de programación de scripting, interpretado —más precisamente, de compilación just-in-time—, multiparadigma, con funciones de primera clase, de un sólo hilo.

¿Qué significa todo eso? Veamos parte por parte.

Un lenguaje de scripting es un lenguaje de programación que se utiliza para manipular, personalizar y automatizar tareas usando funcionalidades de un sistema existente.

Como lenguaje de scripting, JavaScript está diseñado para ejecutarse en un entorno hospedado, por lo que no posee procesos de entrada o salida y depende del entorno para comunicarse con el mundo exterior. En la mayoría de los casos, este entorno host es un navegador.

De manera similar a lo que sucede con la mayoría de los lenguajes de scripting, JavaScript es interpretado. Esto significa que cuando nuestro navegador carga código JavaScript, lo ejecuta directamente sin necesidad de una etapa de compilación previa: hace un análisis léxico y sintáctico y luego crea un árbol de sintaxis abstracta que representa la estructura del código y facilita su interpretación y ejecución instrucción por instrucción.

Es preciso aclarar que en el mundo moderno en el que vivimos, este proceso de interpretación no es tan sencillo, sino que sucede lo que llamamos compilación justo a tiempo (Just In Time, JIT) a diferencia de lo que sucede con lenguajes como C en donde la compilación se realiza con antelación. De esta forma el motor JavaScript puede distinguir entre código que conviene que sea compilado y otras partes que puede interpretar.

<aside> 💡 Si te interesa conocer con mayor profundidad el proceso que realiza el compilador JIT de JavaScript, estos artículos son un buen punto de partida.

What is a Javascript Engine?

The JIT in JavaScript: Just In Time Compiler

</aside>

JavaScript nos permite escribir usando varios estilos o paradigmas. Está orientado principalmente a Programación Orientada a Objetos basada en prototipos, pero soporta el uso de clases. En JavaScript, las funciones son de primer nivel, lo que significa que son tratadas como objetos. Esto nos permite que no haya diferencia práctica entre una variable y una función, lo cual es una característica de los lenguajes funcionales.

Lo último que nos queda por analizar, es la característica de un sólo hilo de ejecución (single-threaded), lo cual significa que JavaScript sólo puede realizar una tarea por vez. Esto puede parecer negativo, pero en realidad abre la puerta a varias ventajas.

La primera de ellas es la simplicidad. Al no haber concurrencia ni ser necesario sincronizar hilos, es mucho más sencillo de comprender y depurar.

Otra ventaja, quizás la más importante, es la facilidad con la que permite manejar eventos, tarea en la JavaScript se destaca. Al haber sólo un hilo, los eventos sólo pueden suceder en orden secuencial, evitando que dos o más procesos desatados por dos eventos compitan por mutar el estado de algún recurso.