我在全局范围内创建了一个导航器变量,并使用它为其分配了一个字符串let
关键词。
// in a browser
let navigator = "Hello!";
console.log(navigator ); // "Hello!"
console.log(window.navigator === navigator ); // false
Here let navigator
价值阴影window.navigator
。但我很好奇到底在哪里let navigator
被存储在?
因为你用过let
而不是var
,它被存储在声明式中环境记录与全球相关的词汇环境对象,而不是全局对象本身。环境记录和词法环境对象是规范机制,不能直接在代码中访问(因此它们的实际实现可能会根据 JavaScript 引擎而有所不同)。
这是一个概念——全局变量不是全局对象的属性——是 ES2015 中引入的一个新事物;在此之前,所有全局变量都是全局对象的属性。截至 ES2015,全球级别let
, const
, and class
标识符绑定不保存在全局对象上,而是保存在单独的声明性环境记录上。
环境记录和词法环境对象与用于在函数内存储局部变量的机制相同(在 ES2015+ 和 ES5 及更早版本中)。
其全局方面定义于§8.2.3 - 设置全局领域对象,这又引用了§8.1.2.5 - NewGlobalEnvironment(G,thisValue).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)