Sobes.tech
Junior

¿De qué maneras se pueden declarar variables en JavaScript? Nombra las diferencias entre estos métodos.

sobes.tech AI

Respuesta de la IA

En JavaScript, las variables se pueden declarar de tres maneras: var, let, const.

Diferencias entre ellas:

Diferencia var let const
Ámbito de alcance Funcional Bloque Bloque
Re-declaración Posible Posible No posible
Reasignación Posible Posible No posible
Hoisting Eleva la declaración y la inicialización a undefined Eleva la declaración, pero no la inicialización Eleva la declaración, pero no la inicialización

Ejemplos:

// var
function ejemploVar() {
  var x = 10; // Ámbito funcional
  if (true) {
    var x = 20; // Re-declaración posible dentro de la misma función
    console.log(x); // 20
  }
  console.log(x); // 20 (la variable x del if está accesible aquí)
}

console.log(x); // Error: ReferenceError: x no está definido (x no es visible fuera de la función)

// Hoisting con var
console.log(a); // undefined
var a = 5;
console.log(a); // 5
// let
function ejemploLet() {
  let y = 10; // Ámbito de bloque
  if (true) {
    let y = 20; // Re-declaración no posible dentro del mismo bloque
    console.log(y); // 20 (es otra variable y)
  }
  console.log(y); // 10 (la variable y fuera del bloque)
}

console.log(y); // Error: ReferenceError: y no está definido

// Hoisting con let
// console.log(b); // Error: ReferenceError: No se puede acceder a 'b' antes de la inicialización
let b = 5;
console.log(b); // 5
// const
function ejemploConst() {
  const z = 10; // Ámbito de bloque
  // z = 20; // Error: TypeError: Asignación a variable constante. (No se puede reasignar)
  if (true) {
    const z = 20; // Re-declaración no posible dentro del mismo bloque
    console.log(z); // 20 (otra variable z)
  }
  console.log(z); // 10 (la variable z fuera del bloque)
}

console.log(z); // Error: ReferenceError: z no está definido

// Hoisting con const
// console.log(c); // Error: ReferenceError: No se puede acceder a 'c' antes de la inicialización
const c = 5;
console.log(c); // 5

// Para objetos y arreglos declarados con const, se puede modificar su contenido
const obj = { name: 'Test' };
obj.name = 'New Test'; // Permitido
// obj = { name: 'Otro Test' }; // Error