窗口对象中奇怪的自我对象

时间:2011-08-10 18:09:26

标签: javascript browser

我无法理解为什么window位于self之下且self位于window对象之下。

如果你去dev-tools或Firebug并写window,你得到DOM window self对象的对象。奇怪的是,window再次位于self之下!

你可以写

window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self

仍然可以得到window对象!

如何?!

2 个答案:

答案 0 :(得分:5)

在回复我的一条评论时:

  

这是一个循环引用,所以它不会结束。仅限编译器   创建一个参考。它恰好是一个参考的参考   创建引用的原始对象。这就是为什么你可以   做window.window.window ...像这样:var obj = {}; obj.obj = obj;。   只创建了一个参考,但它是一个参考   原文,所以你可以做obj.obj.obj.obj.obj.obj.obj === obj。

评论可以在这里看到:Is window really global in Javascript?

答案 1 :(得分:1)

请参阅this pagesee herewindow.window是对自身的引用,因此您可以重复window.window.window ... window,它将始终返回当前窗口。 self返回对当前窗口的引用,所以在这里它是相同的,它将一直返回DOMWindow对象。