相关疑难解决方法(0)

Ecmascript函数的真实世界示例返回Reference?

阅读EcmaScript规范,第8.7节参考规范类型:

Reference类型用于解释这种运营商的行为delete,typeof以及赋值运算符.[...]参考是一个已解析的名称绑定.

允许函数调用返回引用.纯粹为了宿主对象而承认这种可能性.此规范未定义的内置ECMAScript函数返回引用,并且没有为用户定义的函数提供返回引用的规定.

最后两句话让我印象深刻.有了这个,你可以做一些事情coolHostFn() = value(有效的语法,顺便说一句).所以我的问题是:

是否有任何EcmaScript实现定义导致Reference值的主机功能对象?

javascript reference

19
推荐指数
1
解决办法
1344
查看次数

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

阅读ECMAScript 规范,似乎环境记录(词法环境的组件)和引用都用于确定 anIdentifier绑定到哪个变量/函数。换句话说,找到 Identifier 所代表的实际值。

我注意到 aReferenceBase value组件可以包含Environment Record

基值组件可以是未定义的、对象、布尔值、字符串、符号、数字或环境记录。

但是,我不清楚何时使用 aReference而不是直接读取Environment Record当前的执行上下文(由s组件Lexical Environment给出)。running execution contextLexicalEnvironment


编辑:

在接受@Bergi的回答后,我想添加一些我不明白的事情,以防它对未来的读者有所帮助:

  1. ECMAScript 中的标识符查找始终返回Reference类型
    • 要解析变量/函数名称,我们从8.3.2 ResolveBinding开始
    • 您将看到首先检查了running execution context's LexicalEnvironment(其环境记录)
    • 如果未找到匹配项,则向外跟踪词法环境链,直到找到匹配项(或未找到匹配项)
    • 链的末端为global environment,其外部环境为null
    • 一旦找到匹配项,Reference就会返回一个类型,该类型的base value值设置为匹配的环境记录中的名称值
    • 如果未找到匹配项,则返回Reference带有base valueof的 aundefined
    • 因此,标识符查找总是需要检查环境记录并Reference在最后返回类型 …

javascript ecmascript-6 ecmascript-2017

5
推荐指数
1
解决办法
168
查看次数

当提供未声明的变量标识符时,typeof如何绕过ReferenceError?

foo; // ReferenceError: foo is not defined

typeof(foo); // undefined
Run Code Online (Sandbox Code Playgroud)

如何typeof规避ReferenceError何时提供未声明的变量标识符?这只是JavaScript解释器"神奇"还是可以用用户土地概念来解释?

javascript

3
推荐指数
1
解决办法
95
查看次数