全局作用域中 用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取?
用 const
或 let
声明的变量不会挂在在 window
对象上,而是在一个称为块级作用域(block scope)的作用域内。这个作用域可以是一个函数、一个代码块(比如 {}
之间的语句),或者全局作用域。
在块级作用域中声明的变量无法通过 window
对象访问,只能在当前作用域内访问。如果要在全局作用域中访问这个变量,需要显式地将它添加到 window
对象上。
以下是一个例子:
{ const foo = 'bar'; let baz = 'qux'; var quux = 'corge'; } console.log(window.foo); // undefined console.log(window.baz); // undefined console.log(window.quux); // 'corge'
在上面的例子中, foo
和 baz
声明在一个代码块内,因此它们不会挂在在 window
对象上。而 quux
声明使用了 var
,因此它会被挂在在 window
对象上。
如果我们希望在全局作用域中访问 foo
和 baz
,可以将它们手动添加到 window
对象上:
{ const foo = 'bar'; let baz = 'qux'; var quux = 'corge'; window.foo = foo; window.baz = baz; } console.log(window.foo); // 'bar' console.log(window.baz); // 'qux' console.log(window.quux); // 'corge'
但是,在实际编程中,最好尽量避免将变量挂在在 window
对象上,以避免命名冲突和污染全局命名空间。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论