我正在浏览javascript中的对象以便学习。现在,相当于吐出第一个对象中的每个属性,函数被赋予并递归到它找到的任何子对象(包括函数)。
以window对象为例,当window.top指向window时,函数陷入无限循环。我应该如何最好地跟踪我已经遍历过的对象以避免再次进入它们?
答案 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();
}