在过去,在浏览器和 Node.js 中,我们需要使用不同的方式来访问全局对象。在浏览器中,我们使用 window 对象,而在 Node.js 中,我们使用 global 对象。但是,由于这两种方式的存在差异,会导致在不同的环境中出现意外的行为和错误。幸运的是,现在有了一种新的方法来访问全局变量:globalThis
。
globalThis 介绍
globalThis
是一个指向全局对象的属性,它是ES10新增的一个全局对象。它可以跨平台地访问全局作用域,而不需要知道当前环境使用的是哪种全局变量。 globalThis
在浏览器,Node.js 和其他环境中都是可用的。
在浏览器中, globalThis
属性就是 window 对象。在 Node.js 中,globalThis
属性就是 global 对象。
globalThis
的出现,使得我们可以在任何环境中统一地访问全局变量,而不需要担心环境的差异。这使得我们更容易编写跨平台代码,在不同的环境中,代码可以保持一致。
globalThis 的应用
全局变量
在以前的 JavaScript 版本中,我们使用的是全局变量 window 或 global 来存储全局变量。现在, 我们可以使用 globalThis 来代替它们,这样可以统一全局变量的访问方式,代码更加一致。
// 旧版本的全局变量 var myGlobal = window.myGlobal || global.myGlobal; // 新版本的全局变量 var myGlobal = globalThis.myGlobal;
跨平台代码
使用全局对象时,我们需要确定当前环境是使用 window 还是 global。这可能需要我们为不同的环境编写不同的代码。但是,现在我们可以使用 globalThis
来实现一致的代码。
-- -------------------- ---- ------- -- --- -- ------- ------ --- ----------- -- ------ ------ --- ------------ - -- ------- -- ------------ - ------ - ---- - -- ----- ------------ - ------ - -- -- ---------- --- ---------------- - ------
IIFE 中的 this
当我们在 IIFE 中编写 JavaScript 时,我们通常需要将 this 关键字存储到一个变量中,以避免 this 关键字引用错误的对象。 globalThis
给我们提供了一种更通用的方式,以避免在不同的环境中使用不同的变量。
(function(global) { // 实现代码 })(typeof globalThis === 'undefined' ? this : globalThis);
结论
globalThis
的出现,使得我们更容易写出在不同环境下都能够正常执行的代码。它是一个重要的进步,可以大大减少我们在跨平台开发中的困惑和错误。 在编写跨平台 JavaScript 时,请始终优先考虑使用 globalThis
,以确保代码的一致性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67447521c1a23897ea76f831