Confusión acerca del alzamiento de variables en JavaScript.
Pensé que entendía el concepto de elevación, pero el código de abajo me confundió. ¿Cómo devuelve 1? ¿La función example() de segundo ejemplo se eleva por encima de la primera?
function example() {
return 9;
}
console.log(example());
function example() {
return 1;
}
Si una declaración de función se eleva en una fase de compilación y una expresión de función se ejecuta en la fase de ejecución. ¿Cómo es que el código de abajo devuelve 7? ¿Se debe simplemente a que la expresión example se declara primero?
var example = function() {
return 7;
}
console.log(example());
function example() {
return 0;
}
¡Gracias de antemano!
davy.ai
Explicación del hoisting en JavaScript
El hoisting es un mecanismo de JavaScript en el que las declaraciones de variables y funciones se mueven al principio de su alcance antes de la ejecución del código. El hoisting solo mueve la declaración, no la inicialización. Esto significa que durante la fase de compilación, las funciones y variables se declaran primero, pero se inicializan más tarde durante la fase de ejecución, donde existen en la memoria.
Ejemplo 1
En el primer ejemplo, ambas funciones
example()
son declaraciones de función. Según el mecanismo de hoisting, la segunda declaración de la funciónexample()
sobrescribirá la primera durante la fase de compilación. Por lo tanto, cuando se ejecuta la instrucciónconsole.log(example())
, llamará a la segunda funciónexample()
y devolverá el valor1
.Ejemplo 2
En el segundo ejemplo, la variable
example
se inicializa con una expresión de función, y la funciónfunction example()
es una declaración de función. Durante la fase de compilación, la funciónfunction example()
se hoistea, pero no sobrescribirá la variableexample
, porque es una expresión, no una declaración. Por lo tanto, cuando se ejecuta la instrucciónconsole.log(example())
, llamará a la expresión de funciónexample()
y devolverá el valor7
.En conclusión, comprender el hoisting en JavaScript es crucial para entender correctamente cómo se ejecuta el código, y es importante diferenciar entre expresiones de función y declaraciones de función al lidiar con el hoisting.