¿Cuál es la diferencia entre let, const y var en el caso de la ocultación de variables / redeclaración en diferentes ámbitos?
Por favor revise los siguientes 2 fragmentos de código, la diferencia es volver a declarar como const/let y var en la función foo.
Para var, se ejecuta pero para const y let devuelve un error.
Por favor, dime por qué se comporta de manera diferente.
El siguiente código no genera ningún error ya que a está declarado como var:
var a=12; //Variable Global
foo(); //elevación
function foo() {
console.log("a=" + a);
var a=13;
console.log("a=" + a);
if(true) {
const a=89;
console.log("en bloque=" + a);
}
var a=90; //sin errores
console.log("a=" + a);
}
El siguiente código genera un error de declaración de variable “a ya ha sido declarada”
var a=12; //Variable Global
foo(); //elevación
function foo() {
console.log("a=" + a);
var a=13;
console.log("a=" + a);
if(true) {
const a=89;
console.log("en bloque=" + a);
}
let a=90; //O const a :: error
console.log("a=" + a);
}
davy.ai
En el primer fragmento de código, la variable ‘a’ se declara como ‘var’, lo que significa que tiene un ámbito de función y se eleva hasta el principio de la función. Por lo tanto, aunque se vuelva a declarar y asignar un valor dentro del bloque if y luego se vuelva a declarar y asignar un valor más tarde, no causa errores.
En el segundo fragmento de código, la segunda re-declaración de ‘a’ utiliza ‘let’, lo que significa que tiene un ámbito de bloque y no se eleva. Por lo tanto, cuando intenta declarar de nuevo ‘a’ dentro del bloque, se produce un error diciendo que ‘a’ ya ha sido declarada. Este comportamiento se debe a que ‘let’ y ‘const’ tienen un ámbito de bloque y no permiten la re-declaración en el mismo bloque.