gpt4 book ai didi

javascript - 为什么你可以重新定义 globalThis 和 global 而不是 window?

转载 作者:行者123 更新时间:2023-12-05 00:37:10 25 4
gpt4 key购买 nike

let globalThis = undefined在浏览器中没有给我任何错误let [global, globalThis] = [undefined, undefined]在 Node 中没有给我错误
然而let window = undefined抛出语法错误

最佳答案

window 必须存在以使页面(框架)正常工作。从 windowa global execution context 中声明, 你不能用 let 重新声明它或 const .
虽然,可以调用以下代码:var window = undefined;window = undefined; ,但它不会对 window 做任何事情目的。这是因为 window 上的二传手对象是 undefinedconfigurable描述符设置为 false ,不允许更改和删除 window属性(property)。如果您使用以下代码,您可以看到:

console.log(Object.getOwnPropertyDescriptor(this, 'window'))

您仍然可以声明自己的 window任何其他词汇上下文中的变量,除了全局上下文:

const test = () => {
const window = 123;
console.log('in test fn:', window);
}
test()
console.log('in global:', window)

但是为什么我可以更改 globalThis然后?您可以更改它,因为 globalThiswindow 的属性(property).而且似乎没有空的二传手和 configurable描述符设置为 true ,允许更改此属性。这意味着,你可以用 globalThis 做任何你想做的事情。属性(property) :)

console.log(window.hasOwnProperty('globalThis'));
console.log(Object.getOwnPropertyDescriptor(window, 'globalThis'));

关于javascript - 为什么你可以重新定义 globalThis 和 global 而不是 window?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70133805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com