www whatwg what spec language español 3wc javascript ecma262

javascript - spec - whatwg español



¿Activación y objeto variable en JavaScript? (3)

Bueno, acabo de aprender algo :). De este artículo , parece que dentro del contexto de ejecución de una función , el Objeto de activación se utiliza como el Objeto Variable:

Cuando se crea un contexto de ejecución, suceden varias cosas en un orden definido. Primero, en el contexto de ejecución de una función, se crea un objeto de "Activación". [...]

Luego, el proceso de "instanciación de variables" se lleva a cabo utilizando un objeto al que ECMA 262 se refiere como el objeto "Variable". Sin embargo, el objeto Activación se usa como objeto Variable (tenga en cuenta que es importante: son el mismo objeto). Las propiedades con nombre del objeto Variable se crean para cada uno de los parámetros formales de la función, y si los argumentos a la llamada de la función corresponden a esos parámetros, los valores de esos argumentos se asignan a las propiedades (de lo contrario, el valor asignado no está definido).

Sin embargo, cuando estás en el ámbito global, no hay un objeto de activación, por lo que el objeto global se utiliza como el objeto variable en su lugar:

El contexto de ejecución global recibe un manejo ligeramente diferente, ya que no tiene argumentos, por lo que no necesita un objeto de activación definido para referirse a ellos. [...] El objeto global se usa como objeto Variable, por lo que las funciones declaradas globalmente se convierten en propiedades del objeto global.

Así que suena como "Objeto de activación" y "Objeto variable" son lo mismo dentro del contexto de una función, pero no dentro del contexto global.

¿El término "objeto de activación" es simplemente otro nombre de "objeto variable" o hay alguna diferencia entre ellos? He estado leyendo algunos artículos de JavaScript sobre cómo se forman los ámbitos variables en un contexto de ejecución, y desde mi punto de vista, parece que en la mayoría de los artículos usan estos dos términos de manera intercambiable.


Es más exacto decir que un objeto de activación es un tipo de objeto variable. Esto es similar a cómo un hombre es un tipo de HUMANO. Como se indica here , el término ''Objeto variable'' es solo un término GENERALIZADO que se usa para describir cualquier objeto que contenga las propiedades que describen el entorno y el alcance del contexto que se ejecuta actualmente.

Por lo tanto, dentro del contexto de ejecución global (es decir, fuera de cualquier función), termina siendo el objeto Global. ¿Por qué? Porque es el objeto que contiene las propiedades que describen el entorno y el alcance del contexto de ejecución global.

Mientras que dentro de la función el contexto de ejecución local (es decir, dentro de una función), es la función objeto local (también conocido como el objeto Activación) que es el objeto Variable, ya que es el objeto el que posee las propiedades que describen el entorno y el alcance del entorno actual. función ejecutora. Propiedades tales como argumentos de función, por ejemplo.


Un objeto de activación es el objeto más alto en una cadena de alcance con el objeto global más bajo. Considerando que el objeto variable es un concepto abstracto y, por lo tanto, dependiendo de su contexto de ejecución, es cualquier enlace en la cadena de alcance, incluida la activación / objeto global .

Contiene:

  • todas las variables y funciones que declaras dentro del cuerpo de la función;
  • argumentos nombrados según lo especificado por la firma de función;
  • argumentos como un objeto llamado arguments (en caso de que quiera que su función soporte múltiples firmas).

No contiene:

  • this (ya que no es una variable);
  • expresiones de funciones nombradas.

Más información - JavaScript. El núcleo.

Algunas citas en caso de tl; dr :

Un objeto variable es un ámbito de datos relacionados con el contexto de ejecución. Es un objeto especial asociado con el contexto y en el que las variables y las declaraciones de funciones se están definiendo dentro del contexto.

Un objeto variable es un concepto abstracto . En diferentes tipos de contexto, físicamente, se presenta utilizando diferentes objetos.

[..] en el contexto global, el objeto variable es el objeto global en sí [..]

[...] el objeto variable de una función es el mismo objeto variable simple, pero además de las declaraciones de variables y funciones , también almacena parámetros formales y arguments objeto, y se llama el objeto de activación .

[..] al acceder a this en un código, su valor se toma directamente del contexto de ejecución sin ninguna búsqueda de alcance-cadena .