При чтении спецификации ECMAScript кажется, что Запись среды (компонент лексическое окружение) и Reference используется для определения того, к какой переменной/функции привязан Identifier
. Другими словами, поиск фактического значения, представленного идентификатором.
Я заметил, что компонент Base value
компонента Reference
может содержать компонент Environment Record
:
Компонент базового значения может быть неопределенным, объектом, логическим значением, строкой, символом, числом или записью среды.
Но мне не ясно, когда можно использовать Reference
вместо контекста выполнения, просто читая Environment Record
прямо из текущего Lexical Environment
(как указано компонентом LexicalEnvironment
running execution context
).
ИЗМЕНИТЬ:
Приняв ответ @Bergi, я хотел добавить пару вещей, которые я не понял, на случай, если это поможет будущим читателям:
- Identifier lookups in ECMAScript always returns a
Reference
type- To resolve a variable/function name, we start at 8.3.2 ResolveBinding
- Вы увидите, что сначала проверяется
LexicalEnvironment
running execution context
(его запись среды). - Если совпадение не найдено, цепочка лексического окружения следует наружу до тех пор, пока не будет найдено совпадение (или нет).
- Цепочка заканчивается на
global environment
, внешнее окружение которогоnull
. - Как только совпадение найдено, возвращается тип
Reference
, для которогоbase value
установлено значение имени в записи среды, которая соответствует - Если совпадений не найдено, возвращается
Reference
сbase value
изundefined
. - Таким образом, поиск идентификатора всегда влечет за собой проверку записей среды и возврат типа
Reference
в конце.
Reference
'sGetValue
is only ever done after evaluation of anExpression
GetValue(ref)
is used on a Reference to return itsbase value
- Выполнив поиск в спецификации для "GetValue()", вы увидите, что это происходит только после оценки какого-то
Expression
- «Оценка
Expression
» означает просмотр того, что возвращаетReference
иExpression
- Из этого мы можем сделать вывод, что
Expressions
всегда оценивается какReference
(значение) - Примечание.
Expression
включает в себя широкий спектр других продуктов, таких какIdentifierReference
, который глубоко вложен в Создание выражений