Desarrollo en curso, en breve se publicarán el resto de temas.

Capítulo 3: Variables y Declaración

Tras lo visto en el Tema 11, donde se introdujo JavaScript en general, es momento de profundizar en cómo JavaScript gestiona las variables. Este capítulo es crítico: la forma en que declaras variables tiene implicaciones profundas para el scope, el hoisting y la calidad de tu código.

3.1. Declaración con var: Ámbito Global y Función

var fue la única forma de declarar variables en JavaScript durante décadas. Aunque funciona, tiene características sorprendentes que la hacen menos segura que let y const.

var nombre = "Juan";
console.log(nombre);            // "Juan"

var edad = 30;
edad = 31;                       // Permite reasignación
console.log(edad);              // 31

Scope de var: Función, no bloque

A diferencia de otros lenguajes, var tiene function scope, no block scope. Esto significa que una variable declarada con var dentro de un if o for es visible fuera de ese bloque.

function ejemplo() {
    if (true) {
        var x = 10;
    }
    console.log(x);             // 10 (visible fuera del if!)
}

for (var i = 0; i < 3; i++) {
    // i es variable de función, no de bucle
}
console.log(i);                 // 3 (visible fuera del for!)

Esta característica puede causar errores sutiles y es una de las razones por las que let y const son preferibles.

var en global scope

Cuando declaras var a nivel global (fuera de cualquier función), la variable se convierte en propiedad del objeto global.


3.2. Declaración con let: Ámbito de Bloque

let, introducida en ES6, es la forma moderna de declarar variables. Tiene block scope, lo que significa que solo existe dentro del bloque donde se declara.

Block scope en acción

Compáralo con var:

let en bucles anidados


3.3. Declaración con const: Inmutabilidad Aparente

const declara una variable que no puede ser reasignada. No significa que el valor sea inmutable (especialmente para objetos), sino que la referencia no cambia.

const con objetos: Mutable

const con arrays: Mutable

Cuándo usar const, let y var

Declarador
Cuándo usarlo
Razón

const

Por defecto

Previene reasignación accidental

let

Cuando necesites reasignar

Mejor scope que var

var

Raramente

Legacy, comportamiento impredecible


3.4. Hoisting: Comportamiento de las Declaraciones

El hoisting es el comportamiento de JavaScript de "elevar" las declaraciones al inicio de su scope antes de ejecutar el código.

var hoisting

let y const: Temporal Dead Zone (TDZ)

let y const se elevan, pero no se inicializan, creando la Temporal Dead Zone.

Hoisting de funciones

Pero las function expressions no:


3.5. Identificadores Válidos y Buenas Prácticas

Los nombres de variables deben seguir reglas específicas y convenciones.

Reglas para identificadores

  • Comienzan con una letra, _ (guión bajo) o $ (dólar)

  • Pueden contener números, pero no al inicio

  • No pueden ser palabras reservadas de JavaScript

  • Son sensibles a mayúsculas (case-sensitive)

Convención: camelCase

JavaScript usa camelCase para nombrar variables y funciones:

Nombres significativos


3.6. Case-Sensitivity en JavaScript

JavaScript es case-sensitive: nombre, Nombre y NOMBRE son variables diferentes.


3.7. Temporal Dead Zone (TDZ)

La Temporal Dead Zone es el área entre el inicio del scope y donde se declara una variable con let o const.

Incluso si hay una variable con el mismo nombre en un scope externo, la TDZ la oscurece:


Resumen del Capítulo

Las variables son los bloques constructivos del código. Comprender las diferencias entre var, let y const, así como cómo JavaScript gestiona el scope y el hoisting, es fundamental para escribir código limpio y sin errores.

💡 Conceptos Clave:

  • var: Function scope, hoisting completo (inicialización a undefined)

  • let: Block scope, hoisting sin inicialización (Temporal Dead Zone)

  • const: Block scope, no reasignación (pero objetos son mutables)

  • Preferencia moderna: const por defecto, let cuando sea necesario

  • Hoisting: var se eleva completamente, let/const crean TDZ

  • Case-sensitivity: Variables con distinto caso son diferentes

  • camelCase: Convención estándar de nombres en JavaScript

🤔 Preguntas de Reflexión:

  1. ¿Por qué es peligroso var en bucles? Demuéstalo con un ejemplo práctico.

  2. Explica la diferencia entre "no poder reasignar" y "ser inmutable". Da ejemplos con const.

  3. ¿Qué es la Temporal Dead Zone? ¿Por qué existe?

  4. Convierte este código de var a let/const de forma segura:


Última actualización

¿Te fue útil?