Javascript 为什么窗口或文档可以';不能设置为未定义或空?

Javascript 为什么窗口或文档可以';不能设置为未定义或空?,javascript,browser,Javascript,Browser,这可能是个愚蠢的问题,但我还没有找到答案。为什么我们不能做到以下几点 window = undefined 或 我知道这些都是全局的,在浏览器中也可以使用,但是想想JavaScript是如何工作的,这是不可能的吗?我们每次尝试访问这些文件时是否都会重新评估它们 我还想知道窗口或文档对象在设置为随机值后如何保持原状。。。可以是编号或未定义或空,根据: 窗口属性必须返回窗口对象的浏览上下文的窗口代理对象。 文档属性必须返回窗口对象的最新文档对象 意思是窗口是评估所有脚本的上下文。如果它是可写的,那

这可能是个愚蠢的问题,但我还没有找到答案。为什么我们不能做到以下几点

window = undefined

我知道这些都是全局的,在浏览器中也可以使用,但是想想JavaScript是如何工作的,这是不可能的吗?我们每次尝试访问这些文件时是否都会重新评估它们

我还想知道
窗口
文档
对象在设置为随机值后如何保持原状。。。可以是
编号
未定义

,根据:

窗口属性必须返回
窗口
对象的浏览上下文的
窗口代理
对象。 文档属性必须返回
窗口
对象的最新
文档
对象

意思是
窗口
是评估所有脚本的上下文。如果它是可写的,那么上面的内容就不适用,实现也不会遵循规范,因此它是不可写的。
出于类似的原因,您可以将属性添加到
文档
,但不能覆盖它

您可以通过查看IDL来验证这一点:

[Unforgeable] readonly attribute WindowProxy window;
[Unforgeable] readonly attribute Document document;

窗口
是上下文。你不能做
this=something
别的事。
文档
是窗口的属性。它不可写或不可配置

Object.getOwnPropertyDescriptor( window, 'document' );
输出

Object {value: document, 
   writable: false,
   enumerable: true, 
   configurable: false}

我从来没有想过,我假设解释器根本不允许为这些对象赋值。窗口是执行javascript的上下文,其实现由浏览器供应商定义,您应该询问mozilla开发人员。document是dom对象,所以猜一猜我同意什么,但它看起来像是一个硬限制,没有被记录(或者可能是,但我不知道)。即使我用相同的名称声明变量,效果仍然是一样的,例如
var document
。如果以某种方式保留了这些内容,解释器应该抛出错误。编辑后,如何处理
文档
?那么,解释器不应该通过在控制台中抛出错误来惩罚您吗。。“这个浏览器不会让你轰炸所有的东西.”或类似的东西。@如果规范定义了写入只读文件是否应该以静默方式失败,我想不起来术士。奇怪的是,在Chrome
对象中。getOwnPropertyDescriptor(window,“window”)
确实让你
{value:Window,
可写:真
,可枚举:真,可配置:假}
我只是想尝试一下……我仍然不相信这一点:(OP不会做
this=something
,但是
window=something
。在浏览器窗口的上下文中,它是sameYes,在全局范围内
window
this
都引用同一个对象。但是它们的工作方式不同,
this
不可分配对
窗口
没有任何意义>变量。有趣的事实:
window
有一个对自身的引用。
window.window===window
并且
window
有另一个
window
等等…一个窗口中的无限窗口:O
Object {value: document, 
   writable: false,
   enumerable: true, 
   configurable: false}