我认为这是一个有点奇怪的问题。但我会解释我的意思。
事实证明,Mark-and-sweep算法在从这个函数中出去后清除了这个例子中的对象引用。
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();
那么,如果 Mark-and-sweep 只能清除对象,那么这个函数中的所有变量都会保留吗?我的意思是我们不能在函数之外使用它们。这种行为仅仅是因为“JS规则”吗?
PS我的意思是,在知道这些信息之前,我认为我们不能使用函数中的所有变量,因为在我们退出这个函数后它们会被删除。