globalThis hace referencia al objeto global, sin importar el contexto en el que se encuentre tu código.

button.addEventListener("click", function() {
  console.log(this); // button
  console.log(globalThis); // window
})

Esto cambia dependiendo el entorno en el que se esté ejecutando el código, pues en node.js, el objeto global es global, en web workers es self y en el navegador es window.

La verificación más popular que se usaba para determinar el objeto global era la siguiente:

const getGlobal = function () { 
  if (typeof window !== "undefined") { return window; } // Navegador
  if (typeof self !== "undefined") { return self; } // En Web Workers
  if (typeof global !== "undefined") { return global; } // En Node.js
}; 

let global = getGlobal(); 

if (typeof global.alert === "function") { 
  console.log("Entorno del navegador");
} else {
  console.log("Entorno de Node.js");
};

Ahora esa misma verificación, se puede hacer de la siguiente manera:

if (typeof globalThis.alert === "function") { 
  console.log("Entorno del navegador");
} else {
  console.log("Entorno de Node.js");
}

JavaScript se utiliza cada vez más en una amplia variedad de entornos. Cada entorno propia sintaxis para tener acceso al objeto global. Estas diferentes formas de hacer referencia al objeto global han hecho que sea difícil escribir código JavaScript multiplataforma. Afortunadamente, con globalThis solucionamos este problema.

Si quieres aprender más sobre this te dejo los siguientes artículos:

This en diferentes situaciones y su comportamiento
this no es algo fijo, sino que siempre va a estar en constante cambio y depende de en donde y como se use. En esta pequeña guía entenderas mejor este concepto.
Entendiendo this en JavaScript
This es un keyword de JavaScript que tiene un comportamiento muy diferente a otros lenguajes de programación, así para algunos es considerado uno de los grandes errores de diseño del lenguaje.

Recursos