Qu'est-ce qu'un objet d'activation en JavaScript?

13

Dans un contexte d'exécution donné, l'objet Variable est l'objet Activation de ce contexte d'exécution.

D'après mes recherches en ligne, je suis en mesure de trouver la phrase précédente reformulée de différentes manières, mais personne n'est capable de dire de quoi il s'agit.

Qu'est-ce qu'un objet d'activation?

rsman
la source
Un objet d'activation est l' objet le plus haut dans une chaîne de portée, l' objet le plus bas étant un objet global . Voir cette réponse pour plus de détails.
ikaruss

Réponses:

17

Commençons par les racines ...

Le contexte d'exécution est un objet composé de:

  • objet variable, qui est un objet d'activation en cas de fonctions
  • chaîne d'étendues, que vous pouvez considérer comme une liste chaînée d'étendues externes
  • this valeur

L'objet variable est une chose abstraite, qui peut être l'une de celles-ci:

  • objet global (dans le contexte global) - le lieu où vars global (comme window, documentou consoledans un navigateur) résident
  • objet d'activation (pour les fonctions qui définissent les étendues dans ECMAScript)

L'objet d'activation est un objet qui contient:

  • arguments formels de la fonction
  • arguments objet pour cette fonction
  • toutes les fonctions vars et (nommées) à l'intérieur de cette fonction

Ainsi, l'objet d'activation n'est qu'un cas spécial d'objet variable.

C'est essentiellement un conteneur pour toutes les choses locales auxquelles vous pouvez accéder par nom à l'intérieur d'une fonction, à l'exception de this. Je peux être imprécis ici, mais c'est ce que je pense que c'est.

Plus d'explications avec de belles photos:

scriptin
la source
2

Un objet Activation est l'objet utilisé pour contenir les propriétés qui décrivent l'environnement et la portée d'une fonction en cours d'exécution. C'est sur cet objet que sont stockés par exemple les arguments de fonction. Par définition, ACTIVER quelque chose, c'est faire agir ou FONCTIONNER cette chose. Ainsi, lorsque vous entendez «Objet d'activation», pensez à l'objet «FONCTION», ou mieux encore, à l'objet racine LOCAL à une fonction (c.-à-d., L'OBJET LOCAL FONCTION).

En ce qui concerne l'objet Variable, un objet Activation est plus ou moins une instance concrète d'un objet Variable, qui est lui-même (en référence à l'objet Variable ici) un type d'objet ABSTRACT. Comme indiqué ici ...

Le terme «objet variable» est un terme général ou abstrait utilisé pour faire référence à tout objet contenant les propriétés qui décrivent l'environnement et la portée du contexte en cours d'exécution.

Par conséquent, dans l'environnement et la portée du contexte d'exécution global (c'est-à-dire en dehors d'une fonction), l'objet Global est l'objet Variable. Dans le navigateur, étant donné que l'environnement d'exécution global ou le plus externe est la FENÊTRE du navigateur, c'est l' windowobjet qui finit par être utilisé comme objet Variable. C'est pourquoi les variables déclarées avec le varmot - clé en dehors des fonctions se retrouvent sur l' windowobjet.

Dans la portée d'une fonction, cependant, c'est l'objet d'activation (c'est-à-dire l'objet local de la fonction) qui est l'objet variable car c'est cet objet qui est utilisé pour stocker les propriétés qui décrivent la portée d'une fonction d'exécution.

ify.io
la source