JavaScript Scoping Essentials que Debes Conocer: Hoisting, Cierres y Ámbito Léxico

Descubre las bases del ámbito léxico en JavaScript con conceptos como hoisting y cierres. Mejora tu comprensión del funcionamiento de las variables en este popular lenguaje de programación.

19 nov 2025 • 4 min de lectura • Equipo Q2BSTUDIO

JavaScript Scoping: Hoisting, Cierres y Ámbito Léxico

Introducción: cuando JavaScript se pone tramposo puede bastar un fragmento pequeño para que parezca que el lenguaje prueba tu paciencia. Observa estos ejemplos y su explicación para entender por qué ocurren resultados inesperados.

Ejemplo con var: <code>for (var i = 1; i <= 3; i++) { setTimeout(() => console.log(i), 1000); }</code> ¿Qué imprime 1 2 3, 3 3 3 o 4 4 4? El resultado real es 4 4 4. ¿Por qué aparece 4 si 4 no cumple i <= 3 al iterar? La clave está en cómo JavaScript maneja el alcance y la memoria de las variables.

Ejemplo con let: <code>for (let i = 1; i <= 3; i++) { setTimeout(() => console.log(i), 1000); }</code> Aquí el resultado es 1 2 3 porque let crea una nueva copia de la variable para cada iteración del bucle mientras var comparte la misma variable en todo el ciclo.

1. Ámbito léxico: dónde viven tus variables El alcance determina dónde puede accederse a una variable. JavaScript usa alcance léxico, lo que significa que una función recuerda el entorno donde fue definida, no desde dónde se invoca. Por ejemplo: <code>let x = 1; function foo() { console.log(x); } function bar() { let x = 2; foo(); } bar();</code> imprime 1 porque foo recuerda el x del lugar donde se definió, no el x de donde se llamó.

Comparativa de declaradores: var es con alcance de función o global si se declara fuera de una función. let y const son de bloque y solo existen dentro de llaves { } donde se declaran. Ejemplo: <code>function testVar() { if (true) { var x = 10; let y = 15 } console.log(x); console.log(y); }</code> consola muestra 10 y lanza ReferenceError para y porque let queda confinado al bloque.

2. Hoisting: el truco de magia de JavaScript Antes de ejecutar, JavaScript mueve las declaraciones al inicio de su ámbito. Cómo se mueven depende del tipo: var se eleva e inicializa como undefined, let y const se elevan pero permanecen inaccesibles hasta su punto de declaración por el Temporal Dead Zone, las declaraciones function se elevan completamente y las expresiones de función solo elevan la variable pero no la asignación. Ejemplos: <code>console.log(a); var a = 5; // undefined</code> y <code>console.log(b); let b = 10; // ReferenceError</code>. Esto explica por qué a veces el código parece existir antes de declararse.

3. Closures o cierres: funciones que nunca olvidan Un closure es una función que recuerda las variables del entorno donde fue creada aunque ese entorno haya terminado. Por ejemplo: <code>function createCounter() { let count = 0; return function() { count++; console.log(count); }; } const counter = createCounter(); counter(); counter();</code> mostrará 1 luego 2, porque la función interna retiene acceso a count.

Relación entre los conceptos y los bucles Los conocidos comportamientos de setTimeout dentro de bucles se explican por la combinación de alcance léxico, hoisting y closures. Con var todas las iteraciones comparten la misma variable i y cuando las callbacks se ejecutan ya vale 4. Con let cada iteración crea su propia i y cada callback caza el valor correcto.

Conectar los puntos: alcance léxico decide qué variables puede ver una función, hoisting reubica declaraciones y puede crear sorpresas, y closures permiten a las funciones recordar valores, lo que genera patrones poderosos o errores difíciles de depurar. Dominar estos tres conceptos hace que los fragmentos tramposos de JavaScript sean previsibles.

Sobre Q2BSTUDIO y cómo podemos ayudarte Q2BSTUDIO es una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida para empresas que necesitan soluciones escalables y seguras. Ofrecemos servicios de inteligencia artificial e ia para empresas, agentes IA y consultoría de inteligencia de negocio incluyendo Power BI. Si buscas desarrollar una aplicación personalizada podemos acompañarte desde el análisis hasta el despliegue en producción con prácticas de ciberseguridad y pentesting que protejan tu producto. Consulta nuestros servicios de desarrollo en desarrollo de aplicaciones a medida y conoce nuestras propuestas de soluciones de inteligencia artificial para transformar datos en valor.

Además integramos servicios cloud aws y azure, ofrecemos servicios inteligencia de negocio y soporte en Power BI para que tus datos impulsen decisiones. Nuestra oferta incluye ciberseguridad, pentesting y automatización de procesos para optimizar operaciones y reducir riesgos.

Conclusión JavaScript no intenta confundirte, solo tiene reglas que conviene respetar. Controlando alcance léxico, hoisting y closures escribirás código más predecible y robusto. Si necesitas equipos expertos para llevar tus proyectos en aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad o servicios cloud aws y azure, en Q2BSTUDIO estamos listos para colaborar.

¿UNA PAUSA?

Juega un momento antes de irte

NUESTROS SERVICIOS

Cómo podemos ayudarte

¿Tienes un proyecto en mente?

Cuéntanos tu visión y la convertimos en una solución de software. Sea cual sea el alcance, hacemos realidad tu idea.