¿Cuál es la diferencia entre `var`, `let` y `const`?
Ver respuesta — intenta responderla en voz alta primero
var tiene alcance de función y se puede redeclarar; let y const tienen alcance de bloque. let se puede reasignar, const no. Hoy la recomendación es usar const por defecto y recurrir a let solo cuando necesites reasignar.
var: la forma antigua. Tiene alcance de toda la función donde se declara (ignora bloques comoifofor). Además sufre hoisting y se inicializa enundefined.let: tiene alcance de bloque ({ }). Puedes cambiar su valor, pero no puedes redeclararla en el mismo bloque.const: también tiene alcance de bloque. No puedes reasignarla. Cuidado: si guarda un objeto o un arreglo, su contenido sí se puede modificar; lo que no puede cambiar es la referencia.
Regla práctica: usa siempre const; cambia a let solo si de verdad necesitas reasignar; evita var.
const nombre = "Mike";
// nombre = "Otro"; // Error: no se puede reasignar una const
let edad = 25;
edad = 26; // OK: let se puede reasignar
// const con un objeto: la referencia no cambia, pero el contenido sí
const usuario = { activo: true };
usuario.activo = false; // OK
console.log(usuario); // { activo: false }
// Alcance de bloque
if (true) {
var conVar = "visible afuera";
let conLet = "solo aquí adentro";
}
console.log(conVar); // "visible afuera"
// console.log(conLet); // Error: conLet is not defined
Pensar que const hace que el valor sea "inmutable". No es así: const solo evita reasignar la variable. Un objeto o arreglo declarado con const puede mutar tranquilamente su contenido.
"
vartiene alcance de función y hoy en día se evita.letyconsttienen alcance de bloque. La diferencia entre ellas es queletse puede reasignar yconstno. Yo usoconstpor defecto y solo cambio aletcuando necesito reasignar el valor. Un punto importante:constno hace inmutable a un objeto, solo evita cambiar la referencia."
¿Qué imprime este código y por qué?
for (var i = 0; i < 3; i++) {}
console.log(i);
Ver respuesta
Imprime 3. Como var tiene alcance de función (no de bloque), la variable i sigue existiendo después del bucle for y conserva su último valor.