JS GC

问题

那么多面经在说引用计数, 循环引用会无法gc,而以我对jvm python等多个有gc语言的了解,js 再怎么也不至于就是个引用计数

否则循环引用早爆了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function foo() {
var a = {};
function bar() {
console.log(a);
};
a.fn = bar;
return bar;
};

let wm1=new WeakMap();function f(){
let b={};
let a={};
a.x = a;
wm1.set(a,1);
wm1.set(b,2);
wm1.set(foo(),3);
wm1.set(wm1,4);
console.log(wm1.has(a));
console.log(wm1.has(b));
};f();console.log(wm1);

chrome performance 点垃圾桶 进行gc, 然后再执行

1
console.log(wm1);

狗都知道循环引用也可以gc掉, 只要没有持有的引用链跟上来.

我不理解几行代码就可以验证的事情可以一传十,十传百. 真的面试是文科靠背诵, 不靠逻辑是吧。