引言
JavaScript 是一门非常灵活的编程语言,但就因为这种灵活性,它也存在一些不优美的编程模式。比如,在不同的环境中,访问全局对象 window
或 global
的行为是不一样的。而在 ES11 中,我们迎来了一个新的全局对象 globalThis
,它可以帮助我们在不同的宿主环境下,非常方便地访问全局变量。
globalThis 的介绍
globalThis
是一个在全局作用域下存在的变量,它代表了全局对象。如果在浏览器中使用,那么它就是 window
对象;如果在 Node.js 中使用,那么它就是 global
对象。
在 ES11 中,globalThis
成为了 ECMAScript 的内置特性。这意味着你无需加载任何模块,就可以在任何现代 ES11 版本的环境中使用它。
globalThis 的用法
代码示例:
// globalThis 可以在不同的环境下,便捷地访问全局变量 globalThis.setTimeout(() => console.log('Hello, world!'), 1000); // 在浏览器中使用 globalThis,它指向 window 对象 console.log(globalThis === window); //true // 在 Node.js 中使用 globalThis,它指向 global 对象 console.log(globalThis === global); //true
接下来,我们将分别介绍在浏览器和 Node.js 中,如何使用 globalThis
。
在浏览器中使用 globalThis
在浏览器中,我们可以通过 globalThis
来访问全局变量,而不需要使用 window
对象。由于 globalThis
在不同的环境中指向的对象是不一样的,所以我们可以使用 globalThis
来编写可移植的代码。
代码示例:
// 访问全局作用域下的变量 a globalThis.a = 5; console.log(a); // 5 // 在移动端设备中,window 对象可能并不存在 // 但是通过 globalThis,我们可以访问它所指向的全局对象 globalThis.alert('Hello, world!');
在 Node.js 中使用 globalThis
在 Node.js 中,我们可以通过 globalThis
来访问全局变量,而不需要使用 global
对象。
代码示例:
// 访问全局作用域下的变量 a globalThis.a = 5; console.log(a); // 5 // 在 Node.js 中,使用 globalThis 调用全局方法 globalThis.setTimeout(() => console.log('Hello, world!'), 1000);
总结
在 ES11 中,globalThis
成为了内置特性,它可以帮助我们在不同的宿主环境下访问全局变量,代码可移植性得到了很大的提高。在浏览器和 Node.js 中,我们都可以使用 globalThis
来访问全局变量。
因此,在编写 JavaScript 应用程序的时候,我们应该优先使用 globalThis
来代替 window
或 global
对象,以此提升代码的可移植性和通用性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653748397d4982a6ebfbf144