Una de las dudas más frecuentes cuando empiezas con JavaScript es cuándo usar varlet o const para declarar variables. En este artículo te explico la diferencia real entre los tres, con ejemplos prácticos y una regla sencilla para no equivocarte nunca.

Un poco de historia: por qué existen los tres

Durante muchos años, JavaScript solo tenía var para declarar variables. Con la llegada de ES6 (ECMAScript 2015), se introdujeron let y const para solucionar varios problemas que tenía var. Hoy en día, var está prácticamente en desuso y la mayoría de desarrolladores usan let y const exclusivamente.

¿Qué es var y por qué ya no se usa?

var fue la forma original de declarar variables en JavaScript. Tiene dos comportamientos que generan muchos bugs y confusión:

1. Scope de función, no de bloque

var tiene alcance de función. Eso significa que una variable declarada con var dentro de un if o un for es accesible fuera de ese bloque:

if (true) {
  var nombre = "María";
}
console.log(nombre); // "María" — accesible fuera del if

Esto es un comportamiento contraintuitivo que provoca errores difíciles de detectar en proyectos grandes.

2. Hoisting

var sufre hoisting: JavaScript mueve la declaración al inicio de la función antes de ejecutar el código. Esto significa que puedes usar una variable antes de declararla sin que dé error:

console.log(edad); // undefined (no da error)
var edad = 25;

Aunque no da error, devuelve undefined en lugar del valor esperado, lo que genera bugs silenciosos muy difíciles de rastrear.

¿Qué es let?

let se introdujo en ES6 para solucionar los problemas de var. Tiene las siguientes características:

Scope de bloque

Una variable declarada con let solo existe dentro del bloque { } donde fue declarada:

if (true) {
  let nombre = "María";
}
console.log(nombre); // ReferenceError: nombre is not defined

Esto es el comportamiento esperado y evita muchos errores.

No se puede usar antes de declarar

console.log(edad); // ReferenceError
let edad = 25;

Se puede reasignar

El valor de una variable let se puede cambiar después de declararla:

let puntos = 0;
puntos = 10; // correcto
puntos = 20; // correcto

¿Qué es const?

const también se introdujo en ES6. Funciona igual que let en cuanto al scope de bloque, con una diferencia importante: no se puede reasignar.

const PI = 3.14159;
PI = 3; // TypeError: Assignment to constant variable

Esto no significa que el valor sea inmutable en todos los casos. Si declaras un objeto o un array con const, no puedes reasignar la variable, pero sí puedes modificar su contenido:

const usuario = { nombre: "Carlos", edad: 25 };
usuario.edad = 26; // correcto — modificamos una propiedad
usuario = {}; // TypeError — no podemos reasignar la variable

Tabla comparativa: var vs let vs const

Aquí tienes un resumen visual de las diferencias:

Característicavarletconst
ScopeFunciónBloqueBloque
HoistingSí (undefined)Sí (error)Sí (error)
ReasignableNo
RedeclarableNoNo
Uso recomendadoNuncaVariables que cambianVariables fijas

¿Cuándo usar let y cuándo usar const?

La regla es sencilla y la usan la mayoría de equipos profesionales:

Ejemplos prácticos de cuándo usar cada uno:

// const — el valor no va a cambiar
const URL_API = "https://api.ejemplo.com";
const MAX_INTENTOS = 3;
const usuario = { nombre: "Ana" };

// let — el valor puede cambiar
let intentos = 0;
let estaLogueado = false;

for (let i = 0; i < 10; i++) {
  // i necesita cambiar en cada iteración → let
  console.log(i);
}

Errores comunes que debes evitar

Usar var en código nuevo

Si estás aprendiendo JavaScript hoy, ignora var por completo. Todo el código moderno usa let y const.

Usar let cuando deberías usar const

Muchos principiantes usan let para todo porque «así pueden cambiarlo si hace falta». Pero usar const por defecto hace tu código más predecible y fácil de leer — cualquiera que lea el código sabe que esa variable no va a cambiar.

Confundir const con inmutabilidad

const no hace que el valor sea inmutable, solo que no puedes reasignar la variable. Los objetos y arrays declarados con const se pueden modificar internamente.

Resumen rápido

Si tuvieras que quedarte con una sola cosa de este artículo, que sea esta:

Con esta regla de tres cubrirás el 99% de los casos y tu código será más limpio, más seguro y más fácil de mantener.

Si quieres seguir aprendiendo JavaScript, el siguiente paso es entender cómo funcionan las funciones en JavaScript moderno: funciones tradicionales vs arrow functions y cuándo usar cada una.