`globalThis`
Se você já escreveu JavaScript para uso em um navegador web antes, pode ter usado window
para acessar o this
global. No Node.js, você pode ter usado global
. Se você escreveu um código que deve funcionar em qualquer um dos ambientes, pode ter detectado qual deles está disponível e usado isso - mas a lista de identificadores a verificar cresce com o número de ambientes e casos de uso que você deseja suportar. Isso foge do controle rapidamente:
// Uma tentativa ingênua de obter o `this` global. Não use isso!
const getGlobalThis = () => {
if (typeof globalThis !== 'undefined') return globalThis;
if (typeof self !== 'undefined') return self;
if (typeof window !== 'undefined') return window;
if (typeof global !== 'undefined') return global;
// Nota: isso ainda pode retornar o resultado errado!
if (typeof this !== 'undefined') return this;
throw new Error('Não é possível localizar o `this` global');
};
const theGlobalThis = getGlobalThis();
Para obter mais detalhes sobre por que a abordagem acima é insuficiente (bem como uma técnica ainda mais complicada), leia um horrível polyfill globalThis
em JavaScript universal.
A proposta globalThis
introduz um mecanismo unificado para acessar o this
global em qualquer ambiente JavaScript (navegador, Node.js, ou outra coisa?), independentemente do objetivo do script (script clássico ou módulo?).
const theGlobalThis = globalThis;
Observe que códigos modernos podem não precisar acessar o this
global de forma alguma. Com módulos JavaScript, você pode importar
e exportar
funcionalidades de forma declarativa em vez de mexer no estado global. globalThis
ainda é útil para polyfills e outras bibliotecas que precisam de acesso global.