es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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);  
}
Tags:  , , , ,

Answer

  1. Avatar for 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.

Comments are closed.