该
Reference类型用于解释这种运营商的行为delete,typeof以及赋值运算符.[...]参考是一个已解析的名称绑定.允许函数调用返回引用.纯粹为了宿主对象而承认这种可能性.此规范未定义的内置ECMAScript函数返回引用,并且没有为用户定义的函数提供返回引用的规定.
最后两句话让我印象深刻.有了这个,你可以做一些事情coolHostFn() = value(有效的语法,顺便说一句).所以我的问题是:
是否有任何EcmaScript实现定义导致Reference值的主机功能对象?
阅读ECMAScript 规范,似乎环境记录(词法环境的组件)和引用都用于确定 anIdentifier绑定到哪个变量/函数。换句话说,找到 Identifier 所代表的实际值。
我注意到 aReference的Base value组件可以包含Environment Record:
基值组件可以是未定义的、对象、布尔值、字符串、符号、数字或环境记录。
但是,我不清楚何时使用 aReference而不是直接读取Environment Record当前的执行上下文(由s组件Lexical Environment给出)。running execution contextLexicalEnvironment
编辑:
在接受@Bergi的回答后,我想添加一些我不明白的事情,以防它对未来的读者有所帮助:
Reference类型
running execution context's LexicalEnvironment(其环境记录)global environment,其外部环境为nullReference就会返回一个类型,该类型的base value值设置为匹配的环境记录中的名称值Reference带有base valueof的 aundefinedReference在最后返回类型 …foo; // ReferenceError: foo is not defined
typeof(foo); // undefined
Run Code Online (Sandbox Code Playgroud)
如何typeof规避ReferenceError何时提供未声明的变量标识符?这只是JavaScript解释器"神奇"还是可以用用户土地概念来解释?