Вопрос

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

Это было полезно?

Решение

Ну, я только что кое -что узнал :). Из эта статья, Похоже, что В контексте выполнения функции, объект активации используется в качестве объекта переменной:

Когда контекст выполнения создается ряд вещей, происходит в определенном порядке. Во -первых, в контексте выполнения функции создается объект «активации». [...

Затем процесс «переменной экземпляры» происходит с использованием объекта, который ECMA 262 называет объектом «переменная». Однако объект активации используется в качестве объекта переменной (обратите внимание, это важно: они являются одним и тем же объектом). Названные свойства объекта переменной создаются для каждого из формальных параметров функции, и если аргументы для вызова функции соответствуют этим параметрам, значения этих аргументов присваиваются свойствам (в противном случае назначенное значение не определена).

Однако, когда вы находитесь в глобальном объеме, нет объекта активации, поэтому глобальный объект используется в качестве объекта переменной:

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

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

Другие советы

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


Это содержит:

  • все переменные и функции Вы объявляете внутри корпуса функции;
  • аргументы названы как указано в подписи функции;
  • аргументы как объект назван arguments (Если вы хотите, чтобы ваша функция поддерживала несколько подписей).

Он не содержит:

  • this (как это не переменная);
  • названный Функциональные выражения.

Дополнительная информация - JavaScript. Ядро.

Несколько цитат в случае TL; DR:

А переменный объект это Объем данных Связано с контекстом выполнения. Это Специальный объект связано с контекстом и которые хранят переменные и объявления функций определяются в контексте.

А переменный объект является абстрактное понятие. Анкет В разных типах контекста физически он представлен с использованием разных объектов.

..] В глобальном контексте переменный объект это Глобальный объект сам [..

..] функция переменный объект то же самое просто переменный объект, но кроме переменные а также Функциональные объявления, он также хранит Формальные параметры а также arguments объект и называется объект активации.

..] При доступе this В коде его значение берется непосредственно из Контекст исполнения без всяких цепочка применения искать.

Более точно сказать, что объект активации является типом переменного объекта. Это похоже на то, как человек является типом человека. Как указано здесь, Термин «объект переменной» является лишь обобщенным термином, используемым для описания любого объекта, который содержит свойства, которые описывают среду и объем контекста выполнения в настоящее время.

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

Принимая во внимание, что внутри функции локальный контекст выполнения (т. Е. В рамках функции), это функция локального объекта (он же объект активации), который является переменным объектом, поскольку это объект, который содержит свойства, которые описывают среду и объем в настоящее время выполнение функции. Свойства, такие как функциональные аргументы, например.

Активированный объект просто означает объект, который представляет элемент на веб -странице, на котором произошло событие. Таким образом, если изображение нажимается, объект JavaScript, который представляет этот изображение, является активированным объектом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top