为什么 "window = window.parent;" 会造成无限循环?

6

我正在遍历一个框架层次结构,并尝试使用以下方法找到顶部框架:

var win = window;
while (win.parent) {
    //perform actions on win
    win = win.parent;
}

到现在为止,我知道正确的循环条件必须是:
while (win !== top) {

win.parent的存在性检查似乎创建了一个无限循环。这是为什么呢?top为什么需要有一个父级呢?


你尝试过检查 top.parent 是什么吗? - Madara's Ghost
也许这就是“top”如何被标记的方式 - 也许顶部框架有自己作为父级? - Martin James
2个回答

6

你还应该检查window.parent == window是否为false。否则,你将陷入无限循环。如果没有父窗口,那么parent属性将引用自身(无限循环)。

var win = window;
while (win.parent && win.parent != win) {
    //perform actions on win
    win = win.parent;
}​

我发现了这个 MDN 页面:

如果一个窗口没有父窗口,那么它的 parent 属性是对自身的引用。

这里有一个 JSFiddle 的例子。

2

top的父级是它自己。

top == top.parent //true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接