递归到没有无限循环的对象

时间:2013-02-26 11:55:06

标签: javascript dom

我正在浏览javascript中的对象以便学习。现在,相当于吐出第一个对象中的每个属性,函数被赋予并递归到它找到的任何子对象(包括函数)。

以window对象为例,当window.top指向window时,函数陷入无限循环。我应该如何最好地跟踪我已经遍历过的对象以避免再次进入它们?

1 个答案:

答案 0 :(得分:1)

您可以使用数组来存储您当前正在查看的对象。这有助于检测循环引用:

var stack = [];
function traverse(object) {
  if (stack.indexOf(object) !== -1) {
    return; // if the condition above is true, we have a circular reference
  }
  stack.push(object);
  // here go through object properties, recursively calling traverse()
  stack.pop();
}