gpt4 book ai didi

javascript - ECMAScript 中的规范类型环境记录(词法环境)和引用有什么区别?

转载 作者:行者123 更新时间:2023-11-29 10:28:47 25 4
gpt4 key购买 nike

阅读ECMAScript specification , 似乎都是 Environment Record (Lexical Environment 的一个组成部分)和 Reference用于确定 Identifier 绑定(bind)到哪个变量/函数。换句话说,找到标识符所代表的实际值。

我注意到 ReferenceBase 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 Record 的执行上下文环境(由running execution contextLexicalEnvironment 组件给出)。


编辑:

接受@Bergi 的回答后,我想补充一些我不明白的事情,以防对 future 的读者有所帮助:

  1. ECMAScript 中的标识符查找总是返回一个Reference 类型
    • 要解析变量/函数名称,我们从 8.3.2 ResolveBinding 开始
    • 您将看到首先检查运行的执行上下文LexicalEnvironment(它的环境记录)
    • 如果没有找到匹配项,则词法环境链向外移动,直到找到(或没有)匹配项为止
    • 链结束于全局环境,它的外部环境为null
    • 一旦找到匹配项,就会返回一个Reference 类型,它的base value 设置为匹配的Environment Record 中名称的值
    • 如果未找到匹配项,则返回基值未定义引用
    • 因此,标识符查找总是需要检查环境记录并在末尾返回Reference类型
  2. ReferenceGetValue在评估 Expression 之后完成的
    • GetValue(ref) 用于 Reference 以返回其 base value
    • 在规范中搜索“GetValue(”,您会发现它发生在对某种Expression求值之后
    • “评估一个表达式”意味着查看一个表达式返回的Reference
    • 由此我们可以得出结论,Expressions 的计算结果总是Reference(一个值)
    • 注意:Expression 包括范围广泛的其他产品,例如 IdentifierReference,它深深嵌套在 Expression production

最佳答案

环境记录是 record包含多个变量。

引用是表示可变事物的对象,例如对象的属性或单个变量。

要查找一个值,例如在 console.log(value) 中,您只需在当前词法环境中查找名称“value”,然后让标识符对其求值。但是要分配一个值,比如在 value = 5 中,您需要标识符来评估代表数字可以存储的位置的东西 - 这就是 Reference 类型.它包含一个基础——(词法环境的)记录——和一个标识符——特定变量的名称。它可以取消对值的引用 ( GetValue ),或者您可以为其分配一个新值 ( PutValue )。

关于javascript - ECMAScript 中的规范类型环境记录(词法环境)和引用有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51660058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com