递归Javascript对象会导致任何问题(内存泄漏)吗?

时间:2015-03-22 02:07:21

标签: javascript json performance

我们通过API通过JSON传递模型实体,并在客户端稍后对它们进行充气,这样我们就可以在客户端和服务器端以相同的方式使用我们的对象。实体具有标准的Hibernate双向关系。当您在控制台中查看对象时,当您深入挖掘对象时,您会注意到由于这些关系,您实际上可以继续进一步扩展属性并且看起来没有尽头。例如:

$get.OrderItem {validations: Object, metaData: Object, $$getFormattedValue: function, data: Object, modifiedData: Object…}

上面的Orderitem在其数据中有一个Order对象,该对象又有一个Orderitem对象,并且依次打开。这是否具有现实世界的含义(这些东西是否比它们应该大得多或它们是内存泄漏),还是控制台中的对象表示,只是继续扩展并且分别表示每个实体?它只是一个由控制台引起的错觉吗?

1 个答案:

答案 0 :(得分:1)

只要你在每次应该没问题时在内存中引用相同的对象。我知道AngularJS使用作用域层次结构执行此操作:子作用域具有等于父作用域的属性,该作用域具有第一个和最后一个子作用域的属性,依此类推。

只要您没有在代码中的任何其他位置保留对这些对象的引用(即不在此关系图对象中),因此当您不再使用整个树时它们将无法清除,它应该是好的。

当一个对象应该被“销毁”时,你总是可以确保你做了明确的清理(属性归零)。我发现这是一种有助于防止内存泄漏的有用做法。