有这个代码:
function f() {
let a = 'some text';
var obj1 = {};
var obj2 = {};
obj1.p = obj2; // obj1 references obj2
obj2.p = obj1; // obj2 references obj1. This creates a cycle.
}
f();
执行此函数后,它的所有内部对象都将被删除,可能是因为它们不再有来自root. 我不太明白为什么。
function从本质上讲,它也是一个对象——在我看来,这创建了一个“与根的连接”:函数在全局范围内声明,对象在此函数中声明。
还是这里有另外一种逻辑:只有同类型的对象才能形成“引用链”?Plain objects只能与plain objects, arraysarray等链接。
最后一段是胡说八道,莫名其妙。我们不要谈论它。
函数内的局部变量仅在函数执行时才有效(即使在那时 - 有保留)。如果对它们的引用以某种方式脱离函数,它们将保留在内存中,这在您的情况下不会发生。函数完成后,它“不引用”它的局部变量。
另一方面。函数和对象一样,可以是引用链的一部分。