let globalThis = undefined
no me da ningún error en los navegadores
let [global, globalThis] = [undefined, undefined]
no me da ningún error en el nodo
Sin embargo let window = undefined
arroja SyntaxError
window
debe estar presente para que la página (marco) funcione. Dado window
se declara en un contexto de ejecución global , no puede volver a declararla con let
o const
.
Aunque, es posible llamar al siguiente código: var window = undefined;
o window = undefined;
, pero no le hará nada al objeto window
. Esto se debe a que el setter en el objeto de la window
no está undefined
y el descriptor configurable
se establece en false
, lo que impide los cambios y la eliminación de la propiedad de la window
. Puedes ver eso si lo haces con el siguiente código:
console.log(Object.getOwnPropertyDescriptor(this, 'window'))
Todavía puede declarar su propia variable de window
dentro de cualquier otro contexto léxico, que no sea el global:
const test = () => { const window = 123; console.log('in test fn:', window); } test() console.log('in global:', window)
Pero, ¿por qué puedo cambiar el globalThis
entonces? Puede cambiarlo porque globalThis
es la propiedad de la window
. Y no parece tener un setter vacío y el descriptor configurable
se establece en true
, lo que permite cambios en esta propiedad. Todo eso significa que puedes hacer lo que quieras con globalThis
property :)
console.log(window.hasOwnProperty('globalThis')); console.log(Object.getOwnPropertyDescriptor(window, 'globalThis'));