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.

¿Por qué no se incluyen las expresiones de función en el objeto de variable del Contexto de Ejecución?

Mientras iba leyendo la parte del “Contexto de Ejecución” del libro “JavaScript. The Core. (1ra ed.)” de Dmitry Soshnikov, me encontré con esta línea que dice explícitamente que las expresiones de funciones no se incluyen en la propiedad de objetos variables de un contexto de ejecución.

Un objeto variable es un contenedor de datos asociado al contexto de ejecución. Es un objeto especial que almacena variables y declaraciones de funciones definidas en el contexto.

Observa que las expresiones de funciones (a diferencia de las declaraciones de funciones) no se incluyen en el objeto variable.

Entiendo que la representación de un contexto de ejecución como objetos es un concepto abstracto y los detalles pueden variar de un caso a otro, pero aún así, me interesa saber por qué el autor dice explícitamente que las expresiones de funciones no deben incluirse.

AFAIK, las expresiones de funciones son tratadas como cualquier otra variable por los motores de JavaScript, y no veo una razón por la cual deban ser omitidas de los objetos variables.

Edit1: Según la respuesta de Quentín, mi concepción sobre las expresiones de funciones tratadas como variables ordinarias por los motores de JS (como se afirma en el párrafo anterior) era incorrecta. Pero aún así, la pregunta sigue en pie.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual las expresiones de función no se incluyen en la propiedad del objeto variable de un contexto de ejecución es porque no son elevadas como las declaraciones de función. El “hoisting” es el comportamiento de mover las declaraciones al inicio de sus respectivos ámbitos, y las declaraciones de función son elevadas al inicio de sus ámbitos antes de que se ejecute cualquier código. Esto significa que están disponibles para ser llamadas desde cualquier lugar dentro de su ámbito, incluyendo antes de su declaración real en el código.

    Por otro lado, las expresiones de función no son elevadas y solo se pueden llamar después de su declaración. Se asignan a una variable al igual que cualquier otro valor, y esa variable se incluye en la propiedad del objeto variable del contexto de ejecución. Esto significa que una expresión de función se trata como una declaración de variable y no como una declaración de función, por lo tanto, no se incluye en el objeto variable del contexto de ejecución.

    Por lo tanto, la afirmación del autor es correcta, ya que las expresiones de función y las declaraciones de función no son lo mismo en términos de “hoisting” y su inclusión en la propiedad del objeto variable de un contexto de ejecución.

Comments are closed.