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: Ámbito Global y Funciónvar 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); // 31Scope de var: Función, no bloque
var: Función, no bloqueA 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
var en global scopeCuando 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: Ámbito de Bloquelet, 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
let en bucles anidados3.3. Declaración con const: Inmutabilidad Aparente
const: Inmutabilidad Aparenteconst 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 objetos: Mutableconst con arrays: Mutable
const con arrays: MutableCuándo usar const, let y var
const
Por defecto
Previene reasignación accidental
let
Cuando necesites reasignar
Mejor scope que var
var
Raramente
Legacy, comportamiento impredecible
Recomendación moderna: Usa const por defecto, let cuando necesites reasignar, nunca var.
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
var hoistinglet y const: Temporal Dead Zone (TDZ)
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:
constpor defecto,letcuando sea necesarioHoisting: 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:
¿Por qué es peligroso
varen bucles? Demuéstalo con un ejemplo práctico.Explica la diferencia entre "no poder reasignar" y "ser inmutable". Da ejemplos con const.
¿Qué es la Temporal Dead Zone? ¿Por qué existe?
Convierte este código de
varalet/constde forma segura:
Última actualización
¿Te fue útil?