Programación

¿Qué es y cómo funciona JavaScript?

Por Antonio Richaud, Publicado el 03 de Enero de 2024

Introducción

JavaScript, es un lenguaje muy popular que para muchos fue el primer lengauje en aprender, pero que a veces no ha dado dolores de cabeza, a pesar de sus peculiaridades, JavaScript es el motor que impulsa la interactividad en la web. Si alguna vez has hecho clic en un botón y algo "mágico" ha pasado en un sitio web, estoy casi seguro que JavaScript estaba trabajando detrás de esa magia.

Este lenguaje ha evolucionado desde ser una simple herramienta para añadir algo de dinamismo a las páginas web, hasta convertirse en uno de los pilares fundamentales del desarrollo web moderno. Hoy en día, es prácticamente imposible imaginar la web sin él. Y no solo se ha quedado en el navegador, sino que ha invadido también el lado del servidor, gracias a Node.js, permitiendo a los desarrolladores usar un solo lenguaje para todo su stack.

En este artículo, vamos a explorar qué es JavaScript, cómo surgió, cómo funciona, y hasta dónde podemos llegar sabiendolo utilizar.


2. Historia de JavaScript


2.1. Origen y Creación

Todo comenzó en 1995, cuando internet era un bebecito y la web era básicamente un conjunto de páginas estáticas que, aunque informativas, estaban de hueva. En ese tiempo, un ingeniero llamado Brendan Eich, que trabajaba en Netscape Communications (El mismo Netscape del famoso navegador), tenía la misión de crear un lenguaje de scripting que pudiera darle un poco más de vida a esas páginas web.

Brendan tenía un reto enorme: crear un lenguaje que fuera fácil de aprender para los desarrolladores y que pudiera ser utilizado tanto por los profesionales como por los que estaban empezando. ¿El resultado? En tan solo 10 días, nació JavaScript. Aunque en ese momento se llamó “Mocha”, luego “LiveScript”, y finalmente se bautizó como “JavaScript” (gracias a una estrategia de marketing para aprovechar la popularidad de Java, que estaba en pleno auge por esos tiempos).


2.2. Origen y Creación

Después de su lanzamiento, JavaScript empezó a ganar popularidad bastante rapido. Sin embargo, los primeros días no fueron fáciles. Existían problemas de compatibilidad entre navegadores (obviamente), lo que hacía que el código que funcionaba en un navegador, a veces no lo hiciera en otro. Todo un dolor de cabeza que nos ha perseguido a los desarrolladores hasta tiempos actules

A lo largo de los años, JavaScript fue mejorandosé. En 1997, llegó la primera especificación oficial bajo el nombre de ECMAScript, lo que estableció un estándar que todos los navegadores deberían seguir. Desde entonces, se han lanzado varias versiones de ECMAScript, cada una introduciendo nuevas características que han hecho que JavaScript sea más poderoso y versátil. Algunas de las mejoras más importantes que incluyeron la versión ECMAScript 5 (lanzada en 2009), fue que trajo mejoras significativas al lenguaje, y ECMAScript 6 (o ES6), lanzada en 2015, que introdujo características modernas como las clases y los módulos.


2.3. Popularización

Con el paso del tiempo, JS se convirtió en uno de los lenguajes más importantes de la web. Y gracias a la aparición de frameworks y librerías como jQuery, Angular, React, y Vue.js, los desarrolladores hemos empezado a crear aplicaciones web más dinámicas. Además, con la llegada de Node.js en 2009, JavaScript dio el salto al backend, permitiendonos a los desarrolladores utilizar un solo lenguaje para construir aplicaciones completas.

Hoy en día, JavaScript no solo es esencial en el desarrollo web, sino que también se utiliza en el desarrollo de aplicaciones móviles, videojuegos, e incluso en la programación de dispositivos IoT (Internet de las Cosas).


3. Fundamentos de JavaScript

3.1. ¿Qué es JavaScript?

JavaScript es un lenguaje de programación que se ejecuta en el navegador de los usuario. A diferencia de otros lenguajes que se ejecutan en el servidor, JavaScript se ejecuta directamente en el cliente, lo que significa que puede hacer que las páginas web sean interactivas y dinámicas sin necesidad de recargar la página completa. En otras palabras, JavaScript es lo que hace que las páginas web se sientan “vivas”. Ya sea mostrando mensajes emergentes, validando formularios en tiempo real, o creando animaciones.

3.2. Sintaxis Básica

Para entender cómo funciona JavaScript, primero necesitamos conocer su sintaxis básica. JavaScript es relativamente fácil de aprender si ya tienes algo de experiencia con otros lenguajes de programación. Veamos algunos conceptos básicos:

Variables

En JavaScript, puedes crear variables para almacenar datos usando var, let, o const.


// Declaración de variables usando let y const
let nombre = "Antonio";
const edad = 23;

                        

Aquí hemos declarado una variable llamada nombre usando let, que puede cambiarse más adelante si es necesario. También hemos declarado edad usando const, lo que significa que su valor no cambiará.

En JavaScript, es importante elegir entre let y const según la necesidad de tu variable. Si el valor va a permanecer constante, usa const. Si necesitas cambiarlo, usa let.

Funciones

Las funciones son bloques de código que puedes reutilizar en diferentes partes de tu programa. Aquí tienes un ejemplo sencillo:


// Definición de una función simple
function saludar() {
    console.log("¡Hola, mundo!");
}
                        
saludar();

                        

En este ejemplo, hemos definido una función llamada saludar que, cuando es llamada, muestra un mensaje en la consola. Puedes llamar a esta función tantas veces como necesites a lo largo de tu programa.

Condicionales

Los condicionales te permiten ejecutar código basado en ciertas condiciones. El más común es el if:


// Uso de un condicional if-else
if (edad >= 18) {
    console.log("Eres mayor de edad");
} else {
    console.log("Eres menor de edad");
}

                        

Este condicional verifica si la variable edad es mayor o igual a 18. Si es así, muestra el mensaje "Eres mayor de edad", de lo contrario, muestra "Eres menor de edad".

Bucles

Los bucles te permiten repetir un bloque de código varias veces. Un ejemplo común es el for:


// Uso de un bucle for
for (let i = 0; i < 5; i++) {
    console.log("Este es el número " + i);
}

                        

Este bucle se ejecuta cinco veces, mostrando los números del 0 al 4 en la consola. Es una manera eficaz de repetir tareas en tu código sin tener que escribir la misma instrucción varias veces.

3.3. Manipulación del DOM

Una de las características más poderosas de JavaScript es su capacidad para interactuar con el Document Object Model (DOM), que es la representación en memoria de la estructura de una página web. Con JavaScript, puedes modificar el contenido, el estilo y la estructura del DOM de forma dinámica.

Ejemplo Básico

Supongamos que tienes un elemento <p> en tu HTML:


<p id="miParrafo">Este es un párrafo.</p>

                    

Puedes cambiar su contenido utilizando JavaScript de la siguiente manera:


document.getElementById("miParrafo").innerText = "¡Este párrafo ha sido cambiado!";

                        

Este simple fragmento de código busca el elemento con el id de miParrafo y cambia su texto. Y lo mejor es que todo esto ocurre sin necesidad de recargar la página.

Manipulación de Clases CSS

JavaScript también te permite añadir, eliminar o modificar clases CSS de un elemento del DOM. Por ejemplo, si tienes un botón que deseas estilizar al hacer clic, puedes hacer algo como esto:


<button id="miBoton" class="bg-blue-500 text-white p-2 rounded">Haz clic aquí</button>

                    

Y en tu JavaScript, puedes cambiar la clase del botón cuando se hace clic:


document.getElementById("miBoton").addEventListener("click", function() {
    this.classList.toggle("bg-red-500");
});

                    

En este ejemplo, al hacer clic en el botón, su color de fondo cambiará de azul a rojo gracias al método toggle(), que añade o elimina la clase bg-red-500 según sea necesario.

Creación de Elementos Dinámicos

Además de modificar los elementos existentes, JavaScript te permite crear nuevos elementos HTML y agregarlos al DOM. Aquí tienes un ejemplo donde se crea un nuevo elemento <div> y se añade a la página:


let nuevoDiv = document.createElement("div");
nuevoDiv.className = "p-4 bg-green-200 rounded-lg";
nuevoDiv.innerText = "Este es un nuevo div creado con JavaScript!";
document.body.appendChild(nuevoDiv);

                    

En este caso, el código crea un div con una clase para el estilo, le añade texto y lo inserta al final del body de la página.

4. Cómo Funciona JavaScript

4.1. Modelo de Ejecución

JavaScript es un lenguaje que se ejecuta en un solo hilo, lo que significa que puede hacer una cosa a la vez. Sin embargo, es altamente eficiente gracias a su modelo basado en eventos. Este modelo le permite manejar múltiples tareas al mismo tiempo, pero sin ejecutarlas simultáneamente. Todo en JavaScript gira en torno a la pila de llamadas (call stack) y el ciclo de eventos (event loop).

La pila de llamadas es donde las funciones se apilan en el orden en que se invocan. Cuando se invoca una función, se coloca en la parte superior de la pila, y cuando termina de ejecutarse, se elimina de la pila. Si una función invoca otra función, esta última se coloca encima de la primera, y así sucesivamente.

Mientras tanto, el ciclo de eventos está constantemente vigilando la pila de llamadas y la cola de tareas. Si la pila está vacía, el ciclo de eventos toma la primera tarea de la cola y la coloca en la pila para que sea ejecutada. Este mecanismo permite que JavaScript maneje tareas asincrónicas de manera eficiente.

4.2. Asincronía en JavaScript

La asincronía es una característica clave en JavaScript que permite que el código no tenga que esperar a que una tarea termine para continuar ejecutándose. Esto es especialmente útil para operaciones que toman tiempo, como solicitudes a servidores o temporizadores.

JavaScript maneja la asincronía de varias maneras, siendo los callbacks, promises, y async/await los más comunes:

Callbacks

Un callback es una función que se pasa como argumento a otra función y se ejecuta después de que se complete una operación asincrónica. Aquí tienes un ejemplo simple:


function hacerAlgo(callback) {
    setTimeout(function() {
        console.log("Tarea completada");
        callback();
    }, 1000);
}
                                        
hacerAlgo(function() {
    console.log("Callback ejecutado");
});

                    

Promises

Las promises son una evolución de los callbacks que hacen que el manejo de tareas asincrónicas sea más fácil de leer y manejar. Una promise es un objeto que representa el eventual resultado (o fallo) de una operación asincrónica:


let promesa = new Promise(function(resolve, reject) {
    let exito = true;
    if (exito) {
        resolve("Operación exitosa");
    } else {
        reject("Hubo un error");
    }
});
                                        
promesa.then(function(resultado) {
    console.log(resultado);
}).catch(function(error) {
    console.log(error);
});

                    

Async/Await

async y await son características introducidas en ES2017 que permiten escribir código asincrónico de manera más clara y directa. Básicamente, await se utiliza para esperar a que una promise se resuelva:


async function obtenerResultado() {
    try {
        let resultado = await promesa;
        console.log(resultado);
    } catch (error) {
        console.log(error);
    }
}
                                        
obtenerResultado();

                        

4.3. JavaScript en el Navegador

JavaScript se ejecuta principalmente en el navegador del usuario, lo que significa que es el motor detrás de la mayoría de las interacciones en las páginas web. Los navegadores modernos utilizan motores de JavaScript para interpretar y ejecutar el código, siendo V8 (utilizado en Chrome y Node.js) uno de los más conocidos.

Cada vez que un navegador carga una página web, el motor de JavaScript procesa el código, lo interpreta y lo ejecuta. Esto incluye todo, desde la manipulación del DOM hasta el manejo de eventos y la comunicación con servidores a través de AJAX o Fetch API.

La eficiencia y velocidad del motor de JavaScript son cruciales para la experiencia del usuario, y es por eso que los motores como V8 han sido optimizados para ejecutar el código JavaScript lo más rápido posible. Este motor convierte el código JavaScript en código máquina optimizado, lo que mejora significativamente el rendimiento.

5. JavaScript en el Desarrollo Moderno

5.1. Frameworks y Librerías

En los últimos años, JavaScript ha dado lugar a una explosión de frameworks y librerías que han transformado completamente el desarrollo web. Algunos de los más populares incluyen React, Angular, y Vue.js.

Estos frameworks han permitido a los desarrolladores crear aplicaciones web más dinámicas y complejas con menos código y mayor eficiencia. Por ejemplo, React introdujo el concepto de componentes reutilizables, mientras que Angular proporcionó una arquitectura más estructurada para el desarrollo de aplicaciones a gran escala. Vue.js ha sido una opción popular debido a su facilidad de uso y flexibilidad.

5.2. Node.js

JavaScript no se ha limitado solo al frontend. Con la aparición de Node.js en 2009, JavaScript se extendió al lado del servidor, permitiendo a los desarrolladores utilizar el mismo lenguaje tanto en el frontend como en el backend.

Node.js es un entorno de ejecución que permite ejecutar JavaScript en el servidor. Esto abrió la puerta al desarrollo de aplicaciones web completas utilizando un solo lenguaje de programación. Además, Node.js ha demostrado ser increíblemente eficiente para manejar operaciones de I/O intensivas, como aplicaciones en tiempo real y microservicios.

5.3. Full Stack JavaScript

El término Full Stack JavaScript se refiere al uso de JavaScript en todas las capas del desarrollo web, desde el frontend hasta el backend, e incluso en la base de datos. Esto es posible gracias a herramientas como Node.js en el servidor, Express como framework backend, y bases de datos NoSQL como MongoDB.

Con el ecosistema de JavaScript en constante expansión, es posible construir aplicaciones web enteras sin necesidad de cambiar de lenguaje. Esto no solo simplifica el proceso de desarrollo, sino que también mejora la productividad y facilita el mantenimiento del código.

6. Alcances y Futuro de JavaScript

6.1. Aplicaciones Modernas

Hoy en día, JavaScript es la columna vertebral de muchas aplicaciones web modernas. Entre ellas se encuentran las Single Page Applications (SPA) y las Progressive Web Apps (PWA).

Las SPA permiten una experiencia de usuario más fluida y rápida, ya que cargan una única página HTML y actualizan dinámicamente el contenido según sea necesario, sin necesidad de recargar toda la página. Por otro lado, las PWA combinan lo mejor de las aplicaciones web y móviles, permitiendo a los usuarios instalar aplicaciones web como si fueran aplicaciones nativas en sus dispositivos.

6.2. Tendencias Futuras

El futuro de JavaScript parece estar lleno de innovaciones. Algunas de las tendencias más emocionantes incluyen el crecimiento de WebAssembly, que permite ejecutar código en otros lenguajes dentro del navegador a una velocidad casi nativa, y la evolución de herramientas como Deno, que buscan mejorar y simplificar el ecosistema de desarrollo en JavaScript.

Además, con la creciente adopción de Machine Learning y Inteligencia Artificial en el frontend, es probable que JavaScript siga expandiendo sus capacidades para integrarse con estas tecnologías y permitir experiencias de usuario aún más avanzadas.

Conclusión

Desde su creación en 1995, JavaScript ha pasado de ser un simple lenguaje de scripting a convertirse en una herramienta fundamental para el desarrollo web moderno. Su capacidad para adaptarse y evolucionar con las necesidades de los desarrolladores y usuarios lo ha hecho indispensable en la construcción de aplicaciones ricas e interactivas.

Ya sea en el frontend o en el backend, JavaScript continúa siendo el motor que impulsa gran parte de la web tal como la conocemos hoy. Con su futuro lleno de promesas y nuevas capacidades, está claro que JavaScript seguirá siendo una fuerza dominante en el mundo de la tecnología.

Recursos adicionales

Antonio Richaud

Soy un Data Scientist con experiencia en machine learning, deep learning y análisis financiero. Transformo grandes volúmenes de datos en insights y desarrollo soluciones que integran análisis avanzado con programación.