1

为了学习,我正在遍历javascript中的对象。现在这相当于吐出函数给出的第一个对象中的每个属性,并递归到它找到的任何子对象(包括函数)。

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

4

1 回答 1

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();
}
于 2013-02-26T17:41:24.247 回答