让语句引入全局属性吗?
在 JavaScript 中,var 声明在全局对象上创建属性。然而,ES6 中引入的 let 声明强制执行具有块级可见性的词法作用域。
是否让声明创建全局属性?
根据 ECMAScript 规范,let语句不会在全局对象上创建属性。全局绑定主要存储在全局环境的对象环境记录中,该记录链接到全局对象。使用 var 的函数、生成器和变量声明都包含在此对象环境记录中,而其他声明(例如 let)则存储在声明性环境记录中。
说明
与直接在全局对象上创建属性的 var 不同,let 绑定包含在声明性环境记录中。该记录使用内部数据结构,因此外部无法访问。另一方面,对象环境记录利用 JS 对象进行数据存储,其中每个对象属性代表一个绑定。因此,var 绑定反映为全局对象的属性。
浏览器和 Node.js 行为
在浏览器中,某些实现(例如 Firefox)表现出与此相矛盾的行为规格。让绑定显示为全局对象(窗口)上的属性。然而,在严格的 Node.js 环境中,使用 --harmony 或 --harmony_top_level 标志,让绑定在声明性环境记录中正确隔离。
结论
尽管如此根据其词法作用域,let 声明不会在全局对象上引入属性。相反,它们仅限于全局环境的声明性环境记录,强调它们提供的封装性和块级可见性。
以上是JavaScript 中的'let”语句会创建全局属性吗?的详细内容。更多信息请关注PHP中文网其他相关文章!