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

发布于 2024-10-24 12:45:15 字数 2331 浏览 16 评论 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技术交流群

发布评论

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

关于作者

小瓶盖

暂无简介

文章
评论
336 人气
更多

推荐作者

迎风吟唱

文章 0 评论 0

qq_hXErI

文章 0 评论 0

茶底世界

文章 0 评论 0

捎一片雪花

文章 0 评论 0

文章 0 评论 0

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