全局作用域中 用 const 和 let 声明的变量不在 window 上,那到底在哪里?如何去获取?

发布于 2023-09-11 22:11:11 字数 1053 浏览 35 评论 0

constlet 声明的变量不会挂在在 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'

在上面的例子中, foobaz 声明在一个代码块内,因此它们不会挂在在 window 对象上。而 quux 声明使用了 var ,因此它会被挂在在 window 对象上。

如果我们希望在全局作用域中访问 foobaz ,可以将它们手动添加到 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

记忆で

暂无简介

文章
评论
28 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文