[路飞]每日一答:window.window 会输出什么?

106 阅读1分钟

window.window 会输出什么?

一.实践一下

在浏览器中打印 window.window

image.png

不难发现 window.window 依然是一个 window 对象

二.猜想 window 和 window.window 的关系

我们知道浏览器中有个全局对象就是 window,当我们在浏览器中打印 window.window的时候依然输出的是一个 window 对象,那么这个 window 对象和我们全局的window对象有什么关系呢?他们会不会是同一个对象?

image.png

由上图可以知道我们的猜想是正确的。

三.试究原因

window 下的所有属性,都具有这样的特性。

image.png

尝试改变变量:

image.png

name 是挂载在window下的全局对象,可以直接访问也可以通过this指针访问,同时所有全局对象都是可以通过 window 去访问的。所以我们可以得出结论,无论是 直接访问,this 访问还是通过 window 属性去访问,那么你得到的都会是同一个对象。

同样的,我们通过主动挂载也具备相同特性:

image.png

我们在 window 下挂在了一个 name 变量,无论通过以上哪种方式访问,我们得到的还是同一个对象。

所以 window.window 的本质也可以理解为 this.window 或者 直接访问 window,但他们都是指向同一个对象。所以可以得到 window.window === window 的结论了。