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

发布于 2024-10-24 12:45:15 字数 2331 浏览 5 评论 0

constlet 声明的变量在全局作用域中实际上是在全局执行上下文中,而不是挂在 window 对象上。在浏览器环境中,它们存在于全局上下文中,但不直接添加到 window 上。要获取这些变量,你可以在浏览器的开发者工具中查看全局作用域,或者使用 window 对象的 globalThis 属性,它是一个指向全局上下文的通用引用。

我们来详细解释一下 constlet 声明的变量在全局作用域中的行为,以及如何访问它们。

1. constlet 的作用域

  • var : 在全局作用域中声明的 var 变量会被添加到 window 对象上。例如:
  var myVar = 'Hello';
  console.log(window.myVar); // 'Hello'
  • constlet : 在全局作用域中声明的 constlet 变量不会被添加到 window 对象上。例如:
  const myConst = 'World';
  let myLet = '!';
  console.log(window.myConst); // undefined
  console.log(window.myLet);   // undefined

2. 全局作用域中的 constlet

即使 constlet 变量没有直接挂到 window 上,它们仍然存在于全局作用域中。在全局作用域中,它们存在于全局执行上下文中。要访问这些变量,你可以直接使用它们的名字:

console.log(myConst); // 'World'
console.log(myLet);   // '!'

3. 如何获取这些全局变量

虽然 constlet 不挂在 window 上,但你可以通过以下方式访问它们:

  • 通过 globalThis : globalThis 是一个标准化的全局对象引用,可以在浏览器和 Node.js 环境中使用。它指向全局执行上下文。
  console.log(globalThis.myConst); // 'World'
  console.log(globalThis.myLet);   // '!'
  • 通过开发者工具 : 在浏览器的开发者工具中,你可以查看全局上下文,通常在 Console 面板中直接使用变量名也能访问这些变量。

4. 注意事项

  • 严格模式 : 在严格模式下,访问全局变量的方式也会有所限制。例如,在严格模式下, this 关键字不会指向全局对象,而是 undefined 。这意味着在全局作用域中, this 不会引用 window
  • 模块化代码 : 在 JavaScript 模块(ES6 模块)中, constlet 变量的作用域是模块级别的,模块级别的作用域不会被自动添加到全局对象中。

总的来说, constlet 在全局作用域中是局部的,不会自动挂到 window 对象上,但它们仍然是全局可访问的,通过直接使用变量名或 globalThis 可以访问它们。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

关于作者

小瓶盖

暂无简介

0 文章
0 评论
333 人气
更多

推荐作者

linfzu01

文章 0 评论 0

可遇━不可求

文章 0 评论 0

枕梦

文章 0 评论 0

qq_3LFa8Q

文章 0 评论 0

JP

文章 0 评论 0

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