he leido lo siguiente
Izado de var
Hoisting es un mecanismo de JavaScript en el que las variables y las declaraciones de funciones se mueven a la parte superior de su alcance antes de la ejecución del código. Esto significa que si hacemos esto:
console.log (greeter); var greeter = "say hello"
se interpreta asi:
var greeter; console.log(greeter); // greeter is undefined greeter = "say hello"
Entonces, las variables var se elevan a la parte superior de su alcance y se inicializan con un valor de indefinido.
Pero, ¿qué pasa con esto (indefinido) Se mueven en la parte superior, entonces, ¿por qué es "indefinido"?
if (true) { console.log(hi) } var hi = 1
Si se empujan hacia arriba, también tendrían que ser "leídos" primero, ¿no es así?
Javascript solo levanta declaraciones. La inicialización no se iza. . La asignación solo ocurre después de su condición if
.
Esta es también la razón por la cual algunos desarrolladores de JS prefieren let
sobre var
. Si usa let
, obtendrá un error muy claro que dice que la variable no puede ser
if (true) { console.log(hi); } let hi = 1; //Uncaught ReferenceError: Cannot access 'hi' before initialization
La declaración se iza, pero la asignación no.
Es realmente lo mismo que el segundo ejemplo en su cita. Entonces es el equivalente de:
var hi; if (true) { console.log(hi) } hi = 1
Entonces, hi
todavía no está definido en la declaración de registro.
Este artículo tiene una buena discusión y ejemplos: https://blog.logrocket.com/demystifying-function-and-variable-hoisting-in-javascript/