ECMAScript 中的规范类型环境记录(词法环境)和参考有什么区别?
What is the difference between the specification types Environment Record (Lexical Environment) and Reference, in ECMAScript?
读取ECMAScript specification, it seems both an Environment Record (a component of a Lexical Environment), and a Reference用于确定Identifier
绑定到哪个变量/函数。换句话说,找到标识符所代表的实际值。
我注意到 Reference
的 Base value
组件可以包含 Environment Record
:
The base value component is either undefined, an Object, a Boolean, a
String, a Symbol, a Number, or an Environment Record.
但是,我不清楚什么时候会使用 Reference
而不是直接从当前 Lexical Environment
中直接读取 Environment Record
的执行上下文(由running execution context
的 LexicalEnvironment
组件)。
编辑:
接受@Bergi 的回答后,我想补充一些我不明白的事情,以防对未来的读者有所帮助:
- ECMAScript 中的标识符查找总是 return 是
Reference
类型
- 要解析 variable/function 名称,我们从 8.3.2 ResolveBinding
开始
- 您会看到
running execution context
的 LexicalEnvironment
(它的环境记录)首先被检查
- 如果未找到匹配项,则词法环境链向外跟踪,直到找到(或未找到)匹配项
- 链结束于
global environment
,其外部环境为 null
- 一旦找到匹配项,
Reference
类型就会被 return 编辑,其 base value
设置为环境记录中匹配的名称值
- 如果未找到匹配项,
base value
为 undefined
的 Reference
是 returned
- 因此,标识符查找 总是 需要检查环境记录并在最后 return 编辑
Reference
类型
Reference
的 GetValue
是 仅 在评估 Expression
之后完成的
GetValue(ref)
用于对 return 的引用,它的 base value
- 搜索 "GetValue(" 的规范,您会发现它 仅 在评估某种
Expression
之后发生
- "Evaluating an
Expression
" 表示看到 Reference
和 Expression
returns
- 由此我们可以得出结论,
Expressions
总是求值为 Reference
(一个值)
- 注意:
Expression
包括范围广泛的其他产品,例如 IdentifierReference
,它深深嵌套在 Expression production 下
读取ECMAScript specification, it seems both an Environment Record (a component of a Lexical Environment), and a Reference用于确定Identifier
绑定到哪个变量/函数。换句话说,找到标识符所代表的实际值。
我注意到 Reference
的 Base value
组件可以包含 Environment Record
:
The base value component is either undefined, an Object, a Boolean, a String, a Symbol, a Number, or an Environment Record.
但是,我不清楚什么时候会使用 Reference
而不是直接从当前 Lexical Environment
中直接读取 Environment Record
的执行上下文(由running execution context
的 LexicalEnvironment
组件)。
编辑:
接受@Bergi 的回答后,我想补充一些我不明白的事情,以防对未来的读者有所帮助:
- ECMAScript 中的标识符查找总是 return 是
Reference
类型- 要解析 variable/function 名称,我们从 8.3.2 ResolveBinding 开始
- 您会看到
running execution context
的LexicalEnvironment
(它的环境记录)首先被检查 - 如果未找到匹配项,则词法环境链向外跟踪,直到找到(或未找到)匹配项
- 链结束于
global environment
,其外部环境为null
- 一旦找到匹配项,
Reference
类型就会被 return 编辑,其base value
设置为环境记录中匹配的名称值 - 如果未找到匹配项,
base value
为undefined
的Reference
是 returned - 因此,标识符查找 总是 需要检查环境记录并在最后 return 编辑
Reference
类型
Reference
的GetValue
是 仅 在评估Expression
之后完成的GetValue(ref)
用于对 return 的引用,它的base value
- 搜索 "GetValue(" 的规范,您会发现它 仅 在评估某种
Expression
之后发生 - "Evaluating an
Expression
" 表示看到Reference
和Expression
returns - 由此我们可以得出结论,
Expressions
总是求值为Reference
(一个值) - 注意:
Expression
包括范围广泛的其他产品,例如IdentifierReference
,它深深嵌套在 Expression production 下