在 ES2020 中,我们可以使用 globalThis 全局对象来跨平台访问全局对象。它在浏览器端、Node.js 端、Web Worker 中都可以使用。
globalThis 对象的特点
全局对象
在浏览器中,全局对象是 window 对象;在 Node.js 中,是 global 对象;在 Web Worker 中,是 self 对象。使用 globalThis 对象可以在不同平台中访问全局对象,方便我们编写跨平台代码。
可读写
globalThis 对象是可读写的,我们可以使用它设置全局变量。比如,在 Node.js 中,我们可以定义一个全局变量:
globalThis.myGlobalVariable = 'hello'; console.log(myGlobalVariable); // 输出:'hello'
不存在同名变量
在 ES2020 中,我们在全局对象中定义变量时,不存在同名变量的问题。比如,在 Node.js 中,如果我们定义一个全局变量 a:
global.a = 1;
在使用 globalThis.a 时,可以访问到上面的 a 变量。
不依赖于执行上下文
globalThis 对象在不同的执行上下文中始终存在。在函数内部,我们无法访问到全局对象,但是我们可以使用 globalThis 对象访问到全局对象。比如,在函数内部访问全局变量:
function myFunction() { globalThis.myGlobalVariable = 'hello'; } myFunction(); console.log(myGlobalVariable); // 输出:'hello'
示例代码
下面是一个使用 globalThis 对象实现跨平台全局变量的示例。我们使用该方法可以在浏览器、Node.js、Web Worker 中定义一个全局变量。
-- -------------------- ---- ------- -- ------ ---------------------- - ------ ------- -- ---- ------------------------------------ -- --------- ------ -- ------- ------------------------------------ -- --------- ------ -- --- ------ -------------- - ----------- - ------------------------------------ -- --------- ------ -
总结
globalThis 全局对象在 ES2020 中新增,它可以方便我们编写跨平台代码。我们可以在不同的平台中访问全局对象,并且可以在不同的执行上下文中使用。同时,globalThis 对象不存在同名变量的问题,可以更加安全地设置全局变量。使用 globalThis 对象可以更加简单地编写跨平台代码,提高代码的可重用性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c6502510032fedd38c7449