全局作用域中,用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取?
const
和 let
声明的变量在全局作用域中实际上是在全局执行上下文中,而不是挂在 window
对象上。在浏览器环境中,它们存在于全局上下文中,但不直接添加到 window
上。要获取这些变量,你可以在浏览器的开发者工具中查看全局作用域,或者使用 window
对象的 globalThis
属性,它是一个指向全局上下文的通用引用。
我们来详细解释一下 const
和 let
声明的变量在全局作用域中的行为,以及如何访问它们。
1. const
和 let
的作用域
var
: 在全局作用域中声明的var
变量会被添加到window
对象上。例如:
var myVar = 'Hello';
console.log(window.myVar); // 'Hello'
const
和let
: 在全局作用域中声明的const
和let
变量不会被添加到window
对象上。例如:
const myConst = 'World';
let myLet = '!';
console.log(window.myConst); // undefined
console.log(window.myLet); // undefined
2. 全局作用域中的 const
和 let
即使 const
和 let
变量没有直接挂到 window
上,它们仍然存在于全局作用域中。在全局作用域中,它们存在于全局执行上下文中。要访问这些变量,你可以直接使用它们的名字:
console.log(myConst); // 'World'
console.log(myLet); // '!'
3. 如何获取这些全局变量
虽然 const
和 let
不挂在 window
上,但你可以通过以下方式访问它们:
- 通过
globalThis
:globalThis
是一个标准化的全局对象引用,可以在浏览器和 Node.js 环境中使用。它指向全局执行上下文。
console.log(globalThis.myConst); // 'World'
console.log(globalThis.myLet); // '!'
- 通过开发者工具 : 在浏览器的开发者工具中,你可以查看全局上下文,通常在
Console
面板中直接使用变量名也能访问这些变量。
4. 注意事项
- 严格模式 : 在严格模式下,访问全局变量的方式也会有所限制。例如,在严格模式下,
this
关键字不会指向全局对象,而是undefined
。这意味着在全局作用域中,this
不会引用window
。 - 模块化代码 : 在 JavaScript 模块(ES6 模块)中,
const
和let
变量的作用域是模块级别的,模块级别的作用域不会被自动添加到全局对象中。
总的来说, const
和 let
在全局作用域中是局部的,不会自动挂到 window
对象上,但它们仍然是全局可访问的,通过直接使用变量名或 globalThis
可以访问它们。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
下一篇: 深入理解 JVM
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论