Saltar al contenido

Lección 2 de 12 · Lectura y práctica

Variables: var, let y const

CONCEPTO CLAVE: Las variables son contenedores que nos permiten almacenar y manipular datos en nuestros programas. En JavaScript moderno, tenemos tres formas de declarar variables: var, let y const. La elección correcta entre.

Del concepto a la práctica

Taller de esta lección

La elección entre const y let depende de si reasignas la variable, no de si el dato parece importante. const impide cambiar la referencia; let permite actualizarla dentro de su bloque. Esta distinción hace visible qué valores son permanentes y cuáles evolucionan durante un proceso.

Ejemplo resuelto

Un contador de páginas leídas cambia, mientras el título permanece:

js
const titulo = "La casa azul";
let paginasLeidas = 12;
paginasLeidas = paginasLeidas + 8;
console.log(titulo, paginasLeidas); // La casa azul 20

Declarar paginasLeidas con const produciría un error al reasignarla.

Pruébalo

  1. Declara con const el total de páginas.

  2. Declara con let las páginas leídas.

  3. Suma 15 páginas.

  4. Imprime ambas variables.

Error frecuente: usar var por costumbre y ocultar una reasignación accidental. Corrección: empieza con const y cambia a let solo cuando el flujo lo requiera.

Usa total = 120 y leidas = 35; tras sumar 15, la salida esperada para las páginas leídas es 50.

Comprueba tu resultado

Verifica que el total no cambió y que la actualización ocurrió una sola vez dentro del bloque.

var tiene ámbito de función y permite redeclaración; let y const tienen ámbito de bloque. Además, una referencia constante a un objeto no congela sus propiedades: const ficha = { paginas: 10 }; ficha.paginas = 20; es válido, mientras reasignar ficha a otro objeto no lo es.

Diagrama de decisión con ramas Sí y No y un bucle que procesa cada elemento de una lista.
CursaloMapa de práctica
Cómo avanza un programa

Una condición decide qué camino ejecuta el programa. Un bucle repite una operación mientras queden elementos, y termina cuando la lista se agota. Separar ambas ideas ayuda a seguir el flujo y comprobar casos límite.

Ver la infografía en tamaño completo ↗
CONCEPTO CLAVE: Las variables son contenedores que nos permiten almacenar y manipular datos en nuestros programas. En JavaScript moderno, tenemos tres formas de declarar variables: var, let y const. La elección correcta entre ellas es fundamental para escribir código limpio y libre de errores.

¿Qué es una Variable?

Imagina una variable como una caja etiquetada donde puedes guardar información. Cada caja tiene un nombre único (identificador) que te permite encontrar lo que guardaste dentro. En JavaScript, estas "cajas" pueden contener diferentes tipos de datos: números, textos, booleanos, objetos y más.

Antes de usar una variable, debemos declararla. Esto le dice a JavaScript que Reserve espacio en memoria para almacenar nuestro valor. Vamos a explorar las tres palabras clave que tenemos disponibles.

La Palabra Clave "var"

var fue la forma original de declarar variables en JavaScript desde sus inicios. Aunque todavía funciona, tiene algunos comportamientos que pueden resultar confusos, especialmente para principiantes.

var nombre = "Carlos";
var edad = 25;
var esEstudiante = true;

console.log(nombre); // Imprime: Carlos
console.log(edad);  // Imprime: 25

Características de var:

  • Función alcance (function scope): La variable solo existe dentro de la función donde fue declarada.
  • Hoisting: Las declaraciones se mueven al inicio de su ámbito, pero la asignación permanece en su lugar.
  • Redeclaración permitida: Puedes declarar la misma variable múltiples veces sin errores.
⚠️ ADVERTENCIA: El hoisting de var puede causar comportamientos inesperados. La variable existe desde el inicio de la función, pero tiene valor undefined hasta que se ejecuta la línea de asignación. Esto puede llevar a errores sutiles difíciles de detectar.
function ejemploHoisting() {
  console.log(mensaje); // undefined (no error, pero valor inesperado)
  var mensaje = "Hola mundo";
  console.log(mensaje); // "Hola mundo"
}

// Equivale aproximadamente a:
function ejemploHoisting2() {
  var mensaje; // La declaración se "eleva"
  console.log(mensaje); // undefined
  mensaje = "Hola mundo"; // La asignación permanece aquí
  console.log(mensaje); // "Hola mundo"
}

La Palabra Clave "let"

let fue introducida en ES6 (2015) yresolvió muchos de los problemas asociados con var. Es la opción recomendada cuando necesitas una variable cuyo valor cambiará con el tiempo.

let contador = 0;
contador = contador + 1; // Perfectamente válido
contador += 5;
console.log(contador); // Imprime: 6

let nombre = "Ana";
nombre = "María"; // Cambiamos el valor
console.log(nombre); // Imprime: María

Características de let:

  • Bloque alcance (block scope): La variable solo existe dentro del bloque { } donde fue declarada.
  • Temporal Dead Zone: No puedes usar la variable antes de su declaración, lo cual previene errores.
  • Redeclaración prohibida: No puedes declarar la misma variable dos veces en el mismo ámbito.
💡 CONSEJO: Usa let cuando sepas que el valor de la variable cambiará. Por ejemplo: contadores en bucles, valores calculados, estados que evolucionan durante la ejecución.
// Ejemplo práctico: contador en un bucle
for (let i = 0; i < 5; i++) {
  console.log("Iteración número " + i);
}
// console.log(i); // Error: i no está definido fuera del bucle

// Con var, el comportamiento sería diferente y problemático:
for (var j = 0; j < 5; j++) {
  console.log("Iteración número " + j);
}
console.log(j); // Imprime: 5 (j sigue existiendo, ¡peligroso!)

La Palabra Clave "const"

const también fue introduced en ES6 y se usa para declarar valores que no cambiarán durante la ejecución del programa. Es ideal para referencias ثابتas como configuraciones, claves API o valores que queremos proteger de modificaciones accidentales.

const PI = 3.14159;
const NOMBRE_APLICACION = "MiApp";
const TAX_RATE = 0.16;

console.log(PI); // Imprime: 3.14159
console.log(NOMBRE_APLICACION); // Imprime: MiApp

Características de const:

  • Bloque alcance (block scope): Al igual que let, solo existe dentro del bloque donde se declara.
  • Inicialización obligatoria: Debes asignar un valor al momento de la declaración.
  • No permite reassignación: No puedes cambiar el valor después de asignarlo.
⚠️ IMPORTANTE: Para objetos y arrays declarados con const, el valor de la referencia no puede cambiar, pero sí puedes modificar las propiedades internas. Es una diferencia crucial que muchos principiantes pasan por alto.
// Con objetos:
const usuario = {
  nombre: "Pedro",
  edad: 30
};

// Esto NO funciona:
// usuario = { nombre: "Juan" }; // Error!

// Esto SÍ funciona (modificamos propiedades, no la referencia):
usuario.nombre = "Juan";
usuario.edad = 35;
console.log(usuario); // { nombre: "Juan", edad: 35 }

// Con arrays:
const colores = ["rojo", "azul", "verde"];
colores.push("amarillo"); // Perfectamente válido
console.log(colores); // ["rojo", "azul", "verde", "amarillo"]

Comparación Directa

Característica var let const
Alcance Función Bloque Bloque
Hoisting Sí (con undefined) Temporal Dead Zone Temporal Dead Zone
Redeclaración Permitida No permitida No permitida
Reasignación Permitida Permitida No permitida
Inicialización Opcional Opcional Obligatoria
Uso recomendado Ninguno (evitar) Valores que cambian Valores constants

¿Cuál Debería Usar?

La regla general es sencilla:

  1. Por defecto, usa const. Si el valor no necesita cambiar, decláralo como constante. Esto hace tu código más predecible y expresivo.
  2. Si necesitas reasignar, usa let. Cuando sepas que el valor cambiará, let es la elección correcta.
  3. Evita var. En código moderno, no hay razón para usar var. Si ves var en código existente, considera refactorizarlo.
📌 NOTA: Esta jerarquía (const > let > var) es adoptada por la mayoría de proyectos y equipos de desarrollo modernos. Seguirla consistentemente mejora la legibilidad y mantenibilidad de tu código.
// Ejemplo completo: Calculadora de áreas

// Constantes (nunca cambian)
const PI = 3.14159;
const FACTOR_CONVERSIÓN = 0.01; // metros a centímetros

// Variables (pueden cambiar)
let áreaCírculo;
let radio = 5;

// Cálculo
áreaCírculo = PI * radio * radio;
console.log("Área del círculo:", áreaCírculo);

// Cambiamos el radio
radio = 10;
áreaCírculo = PI * radio * radio;
console.log("Nuevo área:", áreaCírculo);

Errores Comunes y Cómo Evitarlos

⚠️ Error 1: Usar const cuando necesitas reasignar.
const precio = 100;
precio = 150; // TypeError: Assignment to constant variable

// Solución: Usa let
let precio2 = 100;
precio2 = 150; // Correcto
⚠️ Error 2: Olvidar inicializar const.
const nombre; // SyntaxError: Missing initializer in const declaration

// Solución: Siempre asigna un valor al declarar
const nombre = "Carlos";
⚠️ Error 3: Redeclarar variables en el mismo ámbito.
let edad = 25;
let edad = 30; // SyntaxError: Identifier 'edad' has already been declared

// Solución: No redeclares
let edad2 = 25;
edad2 = 30; // Esto sí funciona

Buenas Prácticas

  1. Nombra descriptivamente: Usa nombres que expliquen el propósito de la variable.
  2. Seguir convenciones: Usa camelCase para variables (primer palabra en minúscula, siguientes con mayúscula inicial).
  3. Declare primero: Agrupa todas tus declaraciones al inicio de cada bloque o función.
  4. Inicializa inmediatamente: Evita dejar variables sin valor inicial cuando sea posible.
// Malos nombres (evitar)
let x = 5;
let data;
let temp;

// Buenos nombres (preferir)
let númeroDeUsuarios = 5;
let fechaDeNacimiento;
let temperaturaTemporal;
Ver más: Convenciones de nomenclatura en JavaScript

JavaScript tiene convenciones establecidas que la mayoría de desarrolladores siguen:

  • camelCase para variables y funciones: miVariable, calcularTotal
  • PascalCase para clases y constructores: MiClase, UsuarioNuevo
  • UPPER_SNAKE_CASE para constantes que son valores globales: MAXIMO_INTENTOS, API_KEY
  • Mayúsculas iniciales para constantes de configuración: CONFIG, ESTADOS

Resumen Práctico

Usa const para valores que no cambiarán, let cuando necesites reasignar, y evita var completamente en código nuevo. Esta simple regla te protegerá de muchos errores comunes y hará tu código más fácil de entender.
🧠 Quiz

¿Cuál es la salida del siguiente código?

const objeto = { a: 1 };
objeto.b = 2;
console.log(objeto);
  • A) Error: No se puede modificar un objeto constante
  • B) { a: 1 }
  • C) { a: 1, b: 2 }
  • D) undefined
✅ Respuesta: C) { a: 1, b: 2 }

const protege la referencia al objeto, no sus propiedades internas. Podemos agregar, modificar o eliminar propiedades, pero no podemos reasignar la variable a otro objeto diferente.

💡 CONSEJO FINAL: Practica declarando variables con cada palabra clave y experimentando con sus comportamientos. La mejor manera de internalizar estas diferencias es escribir código real y cometer errores (seguidos de corregirlos). ¡No tengas miedo de experimentar!

Sigue con JavaScript Esencial: Domina los Cimientos del Lenguaje

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.