为什么我能在控制台window.window.window.window
中执行此操作并无限追加.window
并返回DOM窗口?
答案 0 :(得分:5)
因为window
对象具有指向自身的window
属性。
就像你写的那样:
var foo = {};
foo.foo = foo;
console.log(foo.foo.foo.foo.foo.foo.foo);
为了好玩,window
对象还有一个self
属性指向自身,(如果你不在框架集中)一个top
属性也指向它。因此你可以写:
console.log(window.window.top.self.top.self.window.window.self.top.top.self);
答案 1 :(得分:4)
因为window
对象有一个名为window
的属性,其中包含对window
对象的引用。
它的工作原理与此相同:
var foo = {};
foo.foo = foo;
foo.bar = 1;
alert(foo.foo.foo.foo.foo.bar);
答案 2 :(得分:2)
window
是对全局对象的引用,window
变量在全局范围内,因此它本质上是指向自身的指针。
答案 3 :(得分:1)
这是因为窗口对象指向窗口对象本身。
此行为的一些原因包括
进一步阅读here