Usa const por defecto, let cuando necesites reasignar el valor y evita var en código nuevo. Las tres palabras declaran variables, pero se diferencian en tres aspectos: si pueden reasignarse, dónde son visibles y qué ocurre si las usas antes de declararlas.
Tabla de diferencias
| Característica | var | let | const |
|---|---|---|---|
| Reasignar el valor | Sí | Sí | No |
| Alcance | Función | Bloque | Bloque |
| Se puede redeclarar en el mismo ámbito | Sí | No | No |
| Uso antes de declarar | undefined | Error (zona muerta temporal) | Error (zona muerta temporal) |
const: el valor no se reasigna
Con const el nombre queda unido a un valor y no puede apuntar a otro:
const precio = 10;
precio = 12; // TypeError: Assignment to constant variable.Atención: const no vuelve inmutable un objeto o un array. Lo que no puedes hacer es reasignar la variable:
const lista = [1, 2];
lista.push(3); // permitido: el array cambia por dentro
console.log(lista); // [1, 2, 3]
lista = []; // TypeErrorlet: cuando el valor cambia
Usa let para contadores, acumuladores o estados que se actualizan:
let intentos = 0;
intentos = intentos + 1;
console.log(intentos); // 1var: alcance de función
var ignora los bloques { } de un if o un for. Eso provoca resultados inesperados:
if (true) {
var a = 1;
let b = 2;
}
console.log(a); // 1 (var escapa del bloque)
console.log(b); // ReferenceError: b is not definedAdemás, var se eleva (*hoisting*): el navegador conoce el nombre antes de ejecutar la línea, pero su valor es undefined hasta llegar a la asignación.
console.log(x); // undefined
var x = 5;
console.log(y); // ReferenceError: Cannot access 'y' before initialization
let y = 5;Ese intervalo en el que let y const existen pero no se pueden leer se llama zona muerta temporal. Es una ventaja: convierte un olvido en un error visible.
Un caso clásico con bucles
for (var i = 0; i < 3; i++) {
setTimeout(() => console.log(i), 0);
}
// 3, 3, 3
for (let j = 0; j < 3; j++) {
setTimeout(() => console.log(j), 0);
}
// 0, 1, 2Con let, cada vuelta crea su propia variable. Con var, todas las funciones comparten la misma.
Regla práctica
- Empieza declarando con
const. - Si el compilador te avisa porque necesitas reasignar, cambia a
let. - No uses
varsalvo que mantengas código antiguo.
Esta costumbre hace el código más fácil de leer: quien lo lea sabe que un const no cambiará de valor.
Última actualización: . Los ejemplos se han comprobado en un navegador actual y en Node.js.