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'));