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.

En JavaScript, ¿cómo puede el objeto “window” ver los valores de una propiedad antes de que se le asigne un valor?

Desde mi entendimiento, todas las propiedades creadas se les asigna el valor de undefined después de la fase de ejecución del Contexto de Ejecución; luego, durante la fase de creación, el motor de JavaScript recorre el script, línea por línea, y asigna un valor si encuentra un operador =. Con esto en mente:

console.log(window);
var myVar = 1;

A partir de la parte de código anterior, ¿por qué la propiedad myVar, dentro del objeto global, muestra un valor de 1? Yo pensaría que debería mostrar un valor de undefined, ya que eso es a lo que fue asignado durante la fase de ejecución. Si intento acceder directamente a la propiedad, así:

console.log(window.myVar);
var myVar = 1;

SÍ veo el valor como undefined… solo cuando registro el objeto global completo es cuando veo el valor como 1. ¿Me estoy perdiendo algo aquí?

Nota: esto es únicamente con fines de aprendizaje.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, tienes razón de que durante la fase de ejecución, todas las propiedades reciben el valor de indefinido. Sin embargo, en tu primer fragmento de código, la instrucción console.log se ejecuta después de que la variable myVar ha sido declarada e inicializada con un valor de 1. Por lo tanto, cuando registras el objeto window completo, la propiedad myVar también mostrará un valor de 1.

    En el segundo fragmento de código, estás intentando acceder a la propiedad myVar antes de que haya sido declarada o inicializada. Es por eso que ves el valor como indefinido al acceder directamente al objeto window.

    Es importante destacar que el orden en el que se declaran e inicializan variables y funciones puede afectar sus valores durante la ejecución. Por eso es buena práctica declarar e inicializar todas las variables en la parte superior de tu código para evitar cualquier comportamiento inesperado.

Comments are closed.