Что такое объект активации в JavaScript?

13

В данном контексте выполнения объект Variable является объектом Activation этого контекста выполнения.

Из моего онлайн-исследования я могу найти предыдущее предложение, перефразированное по-разному, но никто не может сказать, что это такое.

Что такое объект активации?

rsman
источник
Объект активации - это самый верхний объект в цепочке областей видимости с самым нижним глобальным объектом . Смотрите этот ответ для более подробной информации.
ikaruss

Ответы:

17

Позвольте мне начать с корней ...

Контекст выполнения - это объект, который состоит из:

  • переменный объект, который является объектом активации в случае функций
  • цепочка областей видимости, которую вы можете рассматривать как связанный список внешних областей
  • this значение

Переменный объект - это абстрактная вещь, которая может быть любой из них:

  • глобальный объект (в глобальном контексте) - место, где находятся глобальные переменные (например window, documentили consoleв браузере)
  • объект активации (для функций, которые определяют области действия в ECMAScript)

Объект активации - это объект, который содержит:

  • формальные аргументы функции
  • arguments объект для этой функции
  • любые переменные и (именованные) функции внутри этой функции

Итак, объект активации - это просто особый случай объекта переменной.

По сути, это контейнер для всех локальных вещей, к которым вы можете обращаться по имени внутри функции, за исключением this. Я могу быть неточным здесь, но я думаю, что это так.

Больше объяснений с некоторыми красивыми картинками:

scriptin
источник
2

Объект активации - это объект, используемый для хранения свойств, которые описывают среду и область выполнения выполняемой функции. Именно на этом объекте хранятся аргументы функции, например. По определению, АКТИВИРОВАТЬ что-либо означает заставить эту вещь действовать или ФУНКЦИЮ. Поэтому, когда вы слышите «объект активации», думайте об объекте «FUNCTION» или, что еще лучше, о корневом объекте, который является ЛОКАЛЬНЫМ для функции (то есть, ЛОКАЛЬНЫЙ ОБЪЕКТ FUNCTION).

Что касается объекта Variable, объект Activation является более или менее конкретным экземпляром объекта Variable, который сам является (ссылаясь на объект Variable здесь) типом объекта ABSTRACT. Как указано здесь ...

Термин «Переменный объект» - это общий или абстрактный термин, используемый для обозначения любого объекта, который содержит свойства, описывающие среду и область действия текущего выполняемого контекста.

Следовательно, в среде и области действия глобального контекста выполнения (т. Е. Вне функции) глобальный объект является объектом переменной. В браузере, поскольку глобальной или самой внешней исполняющей средой является WINDOW браузера, именно этот windowобъект в конечном итоге используется в качестве объекта Variable. Вот почему переменные, объявленные с varключевым словом вне функций, попадают в windowобъект.

Однако в области действия функции именно объект Activation (т. Е. Локальный объект функции) является объектом переменной, поскольку именно этот объект используется для хранения свойств, описывающих область действия выполняемой функции.

ify.io
источник