Javascript 全局let变量存储在哪里?
我在全局范围内创建了一个navigator变量,并使用Javascript 全局let变量存储在哪里?,javascript,ecmascript-6,let,Javascript,Ecmascript 6,Let,我在全局范围内创建了一个navigator变量,并使用let关键字为其分配了一个字符串 // in a browser let navigator = "Hello!"; console.log(navigator ); // "Hello!" console.log(window.navigator === navigator ); // false 这里让navigator值对窗口进行阴影处理。navigator。但是我
let
关键字为其分配了一个字符串
// in a browser
let navigator = "Hello!";
console.log(navigator ); // "Hello!"
console.log(window.navigator === navigator ); // false
这里
让navigator
值对窗口进行阴影处理。navigator
。但是我很想知道let navigator
存储在哪里?因为您使用了let
而不是var
,它存储在与全局相关联的声明中,而不是全局对象本身。环境记录和词汇环境对象是规范机制,不能在代码中直接访问(因此它们的实际实现可能因JavaScript引擎而异)
这是一个概念-不是全局对象属性的全局-是从ES2015开始引入的新事物;在此之前,所有全局对象都是全局对象的属性。从ES2015开始,全局级别的let
、const
和class
标识符绑定不保存在全局对象上,而是保存在单独的声明性环境记录上
环境记录和词汇环境对象是用于在函数中存储局部变量的相同机制(在ES2015+和ES5及更早版本中)
它的全局方面在中定义,它依次引用。Mozilla这样描述它:
global let。。。生活在一个不可见块的范围内,该块名义上包含了网页中运行的所有JS代码。
是否有方法检查词法范围内的所有变量?像这样,我们可以console.log(window)
并查看所有相关变量。@GAkshay:no。这就是为什么它们被移出全局对象的部分原因,以使它们不被发现。随着模块的增加,我们的目标是不再使用全局对象来处理任何事情(我应该知道这会在前面问题的答案中有所涉及)