JavaScript 中,global 和 globalThis

在 JavaScript 中,global 和 globalThis 都是与全局作用域相关的概念,但它们有不同的用途和适用范围,主要区别如下:

一、定义与用途

  1. global

    • 定义global 是 Node.js 环境中的全局对象。
    • 用途:在 Node.js 中,你可以通过 global 对象来定义全局变量或函数。这些变量或函数在整个 Node.js 应用程序中都是可访问的。
  2. globalThis

    • 定义globalThis 是一个标准化的全局对象,旨在为所有 JavaScript 环境提供一种一致的方式来访问全局对象。
    • 用途globalThis 的引入解决了不同 JavaScript 环境中全局对象名称不一致的问题。无论是在浏览器、Web Worker、Node.js 还是其他 JavaScript 环境中,globalThis 都可以用来访问全局对象。

二、适用范围

  1. global

    • 环境限制global 仅在 Node.js 环境中有效。
    • 兼容性:由于 global 是 Node.js 特有的,因此在非 Node.js 环境中(如浏览器)使用 global 会导致错误。
  2. globalThis

    • 广泛适用globalThis 是在 ECMAScript 2020 (ES11) 中标准化的,得到了广泛的标准化支持。它可以在所有现代 JavaScript 环境中使用,包括浏览器、Web Worker、Node.js 等。
    • 一致性:使用 globalThis 可以确保代码在不同环境中的一致性和可移植性。

三、代码示例

  1. 在 Node.js 中使用 global

    global.myGlobalVar = "Hello from global!";  
    console.log(global.myGlobalVar); // 输出: Hello from global!
  2. 在浏览器和 Node.js 中使用 globalThis

    globalThis.myGlobalVar = "Hello from globalThis!";  
    console.log(globalThis.myGlobalVar); // 在浏览器和 Node.js 中都会输出: Hello from globalThis!

四、兼容性

  • global:由于它是 Node.js 特有的,因此在不需要兼容 Node.js 以外环境的情况下,可以直接使用 global
  • globalThis:除了极少数旧版浏览器(如 Internet Explorer)外,现代浏览器和 Node.js 都支持 globalThis。如果需要兼容旧版浏览器,可以使用 polyfill 来模拟 globalThis 的行为。

猜你喜欢

转载自blog.csdn.net/H2608520347/article/details/143215196