Según tengo entendido, todas las propiedades creadas reciben el valor de indefinido después de la fase de ejecución del Contexto de ejecución; luego, durante la fase de creación, el motor JS revisa el script, línea por línea, y asigna un valor si encuentra un = operador. Teniendo esto en cuenta:
console.log(window); var myVar = 1;Del fragmento anterior, ¿por qué la propiedad myVar, dentro del objeto global, muestra un valor de 1? Hubiera pensado que mostraría un valor de indefinido, ya que esto es lo que se configuró durante la fase de ejecución. Si trato de acceder a la propiedad directamente, como:
console.log(window.myVar); var myVar = 1;SÍ veo el valor como indefinido... es solo cuando registro todo el objeto global que veo el valor como 1. ¿Me estoy perdiendo algo aquí?
Nota: esto es simplemente para fines de aprendizaje.
esto no tiene nada que ver con el objeto ventana, esto se llama elevación
Hoisting se refiere al proceso por el cual el intérprete parece mover la declaración de funciones, variables o clases a la parte superior de su alcance, antes de la ejecución del código.
otro ejemplo seria
function test(){ console.log(myVar); var myVar = 1; } test() esto aún registraría myVar como undefined . mientras que omitir myVar arrojaría una excepción ...
Editar:
esto solo sucede en la consola de Chrome, de lo contrario no estaría definido.