Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 全局let变量存储在哪里?_Javascript_Ecmascript 6_Let - Fatal编程技术网

Javascript 全局let变量存储在哪里?

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。但是我

我在全局范围内创建了一个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。这就是为什么它们被移出全局对象的部分原因,以使它们不被发现。随着模块的增加,我们的目标是不再使用全局对象来处理任何事情(我应该知道这会在前面问题的答案中有所涉及)