为什么我可以存储一个物品作为它自己的财产?这是一个简单的例子:
let obj = {};
obj['obj'] = obj;
这将导致拥有一个无限的对象树:我可以使用obj
或obj.obj.obj.obj
来调用obj.obj.obj.vobj.obj.obj.obj.obj
。
这是性能问题吗?它根本不会打扰浏览器。
实际上,当我在Chrome中查看控制台并点击展开obj
的属性时(在 i 的工具提示上):
以下评估值刚刚
所以当我点击展开时,他们就被评估了。
这是否意味着JavaScript在我实际访问它们之前也不会查看obj
的属性?
obj.obj
只是对obj
的引用吗?
答案 0 :(得分:2)
这是性能问题吗?
没有。循环引用与其他引用一样。每个类实例实际上都有一个循环引用:
instance.constructor.prototype.constructor.protototype
obj.obj
只是对obj
的引用吗?
是
这是否意味着JavaScript在我实际访问它们之前也不会查看
obj
的属性?
是。并且控制台不会尝试扩展它,因为它会陷入无限循环。