La diferencia entre let, const y var en JavaScript depende del alcance de la variable, de si puedes reasignarla y de cómo se comporta antes de su declaración. Como criterio inicial, utiliza const cuando no vayas a reasignar y let cuando necesites cambiar el valor.
var sigue existiendo y es importante entenderlo al mantener código antiguo. Sin embargo, su alcance de función suele resultar menos claro en bloques y bucles.
Const no permite reasignar la variable
const nombre = "Ana";
console.log(nombre); // Ana
// nombre = "Luis"; // TypeError si descomentas esta líneaUna declaración const normal necesita inicialización. Su valor no tiene que ser conocido al escribir el programa: puedes asignarle el resultado de una función cuando se ejecute.
Let permite cambiar el valor
let intentos = 0;
intentos += 1;
console.log(intentos); // 1Es apropiado para un contador o una referencia que debes sustituir. No elijas let solo porque el valor sea un array: modificar su contenido no equivale a reasignar la variable.
Const no hace inmutables los objetos
const usuario = { nombre: "Ana" };
usuario.nombre = "Luis";
console.log(usuario.nombre); // Luis
const tareas = [];
tareas.push("Estudiar JavaScript");
console.log(tareas.length); // 1La referencia permanece, pero sus propiedades o elementos pueden cambiar. Object.freeze() puede impedir cambios en propiedades propias a un nivel, pero no congela automáticamente todos los objetos anidados.
Alcance de bloque frente a alcance de función
function comprobar() {
if (true) {
let temporal = "Solo dentro del bloque";
var disponible = "Dentro de la función";
}
console.log(disponible);
// console.log(temporal); // ReferenceError
}
comprobar();Let y const pertenecen al bloque donde se declaran. Var pertenece a la función envolvente o al contexto superior correspondiente. Una variable global tampoco se comporta igual en un script clásico que en un módulo.
Hoisting y zona temporal muerta
Con var, acceder antes de la asignación puede devolver undefined. Con let y const, el acceso antes de la inicialización provoca un ReferenceError dentro de su zona temporal muerta. Por eso «se eleva» no significa «puedo usarla antes».
console.log(puntos); // undefined
var puntos = 10;
// Ejecuta aparte este ejemplo:
// console.log(total); // ReferenceError
// let total = 10;Prueba los casos por separado: un error no capturado interrumpe la ejecución de ese recorrido y puede impedir que veas ejemplos posteriores.
Qué utilizar en proyectos nuevos
- Empieza con const para referencias estables.
- Usa let si la lógica requiere una reasignación.
- Evita cambiar declaraciones antiguas sin revisar su alcance.
- Elige nombres claros en lugar de reutilizar variables para tareas distintas.
Preguntas frecuentes
¿Const siempre mejora el rendimiento?
No debes elegirla por una promesa general de velocidad. Su utilidad principal es expresar y limitar la reasignación.
¿Puedo declarar dos let con el mismo nombre?
No en el mismo ámbito. En bloques diferentes puede ser válido, pero ocultar nombres puede dificultar la lectura.
Practica con un contador y un objeto de usuario. Para ejecutar los ejemplos utiliza Visual Studio Code y repasa las características de JavaScript.
Referencia técnica: documentación de MDN.




