详解 ES12 中全局对象 globalThis

阅读时长 4 分钟读完

详解 ES12 中全局对象 globalThis

在过去,JavaScript 中访问全局对象的方法因不同的运行环境而异,例如 Node.js 中的全局对象是 global,而浏览器中的全局对象则是 window。ES12 中增加了一个全新的全局对象 globalThis,它可以在所有环境中使用,无论是浏览器还是 Node.js 等其他的 JavaScript 运行环境。

globalThis 简介

globalThis 是一个代表全局环境的对象,它的属性和方法是全局范围内的,可以直接通过名称访问。例如,浏览器中可以通过以下方式访问全局对象:

而使用 globalThis 则可以将代码改写为:

这样就可以在任何环境中访问全局对象,而无需担心具体的运行环境。

globalThis 在 Node.js 中的应用

在 Node.js 中,globalThis 对象的作用和在浏览器中是一样的,它提供了一个在所有模块中访问全局变量的通用方法。在 Node.js 中,可以使用以下方式访问 globalThis 对象并设置全局变量:

然后,在其他的 Node.js 模块中可以直接访问该全局变量:

这种方式既优雅又安全,因为它避免了使用 Node.js 中不安全的全局对象 global

globalThis 在浏览器中的应用

在浏览器中,globalThis 对象的应用也非常广泛,主要是在以下场景中使用:

  • 在 Web Workers 中访问全局变量;
  • 在不同的 JavaScript 构建工具中共享数据。

在 Web Workers 中,没有全局变量 window,因此无法直接访问全局变量。通过 globalThis 对象,可以在 Web Workers 环境中访问全局变量:

然后,在 Web Workers 中可以直接访问该全局变量:

在不同的 JavaScript 构建工具中,可以利用 globalThis 对象共享数据,例如一个项目中多个 JavaScript 文件之间需要共享数据时,可以将这些数据添加到 globalThis 中,然后在其他文件中直接访问这些数据:

然后,在其他的 JavaScript 文件中可以直接使用这些数据:

ES12 其他全局变量的变动

随着 ES12 中全局对象 globalThis 的引入,也带来了其他全局变量的改变,例如 evalFunction。在 ES11 中,为了提高安全性,evalFunction 在默认情况下不能访问全局作用域中的变量和函数。在 ES12 中,这两个全局变量的默认行为被修改,可以访问全局作用域中的变量和函数了。

总结

globalThis 对象的出现,使得 JavaScript 中全局对象访问变得更加统一和简单。它的应用也非常广泛,不仅可以在 Node.js 和浏览器中使用,还可以在 Web Workers 和不同的 JavaScript 构建工具中共享数据。将来,我们可以预期更多使用 JavaScript 的环境也将支持 globalThis 对象,为使用全局对象提供更加优秀的解决方案。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/644fb812980a9b385b90e3dd

纠错
反馈

纠错反馈