¿Cómo es que en el primer bloque de código aparece "Hola", pero en el segundo bloque de código aparece indefinido y luego "adiós"?
Para el primer bloque de código, entiendo que está subiendo por la cadena de alcance para obtener la variable izada "Hola", y obtengo el resultado esperado.
var greet = "Hello"; var sayHi = () => { console.log(greet); } sayHi();Sin embargo, estoy luchando por entender por qué, si declaro la variable saludar después de la primera instancia de console.log, ¿obtengo indefinido primero? ¿No debería el motor JS subir la cadena de alcance para encontrar "Hola" primero?
var greet = "Hello"; var sayHi = () => { console.log(greet); var greet = "Bye"; console.log(greet); } sayHi();Hay una diferencia entre declaración e inicialización. La declaración crea la variable, la inicialización le asigna su valor inicial. La declaración var greet = "Bye"; contiene ambas cosas, pero solo se iza la declaración.
En el segundo bloque después del izado, se ejecuta como sigue. Por eso ves undefined y luego Bye .
var greet = "Hello"; var sayHi = () => { var greet; console.log(greet); greet = "Bye"; console.log(greet); } sayHi(); Dentro de la función, ve que la variable greet está definida en su alcance. No buscará en la cadena de alcance como esperaba.