在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ 去除外部對(duì) WeakMap key 的強(qiáng)引用,為什么 WeakMap 中的 ke

去除外部對(duì) WeakMap key 的強(qiáng)引用,為什么 WeakMap 中的 key 還在?

WeakMap 這個(gè)特殊的集合類型實(shí)在 ES6 中加入的,其獨(dú)特之處就在于弱引用。

弱引用的定義這邊就不說(shuō)了,大家可以到 MDN 上去看。

下面直接拋出問(wèn)題代碼:

var a = new WeakMap();
var b = {id: 1};
var c = "lalala"

// 添加內(nèi)容
a.set(b,c);

//解除外部強(qiáng)引用
b = null;

console.log(a);

解除外部強(qiáng)引用后,WeakMap 中應(yīng)該沒(méi)有內(nèi)容才對(duì),但是結(jié)果是, WeakMap 中的內(nèi)容還在!

這是為什么?求解

回答
編輯回答
糖豆豆

謝謝邀請(qǐng),
阮一峰《ES6標(biāo)準(zhǔn)入門(mén)》WeakMap說(shuō)到 :某個(gè)鍵名是否存在完全不可預(yù)測(cè),和垃圾回收機(jī)制運(yùn)行是否運(yùn)行相關(guān),這一刻可以取到鍵名,下一刻垃圾回收機(jī)制突然運(yùn)行,這個(gè)鍵就消失了。
b = null 等于通知垃圾回收例程將其清除
垃圾回收是周期性的,應(yīng)該是還沒(méi)有執(zhí)行垃圾回收。

題主可以試一下,設(shè)置個(gè)setTimeout 設(shè)置幾分鐘后打印,等垃圾回收后 ,之后就會(huì)打印一個(gè)空WeakMap
或者node中 global.gc(); 手動(dòng)執(zhí)行垃圾回收后,再打印一下。

我測(cè)試的

圖片描述

2017年12月1日 20:28