鍍金池/ 問答/HTML/ 去除外部對 WeakMap key 的強引用,為什么 WeakMap 中的 ke

去除外部對 WeakMap key 的強引用,為什么 WeakMap 中的 key 還在?

WeakMap 這個特殊的集合類型實在 ES6 中加入的,其獨特之處就在于弱引用。

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

下面直接拋出問題代碼:

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

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

//解除外部強引用
b = null;

console.log(a);

解除外部強引用后,WeakMap 中應該沒有內容才對,但是結果是, WeakMap 中的內容還在!

這是為什么?求解

回答
編輯回答
糖豆豆

謝謝邀請,
阮一峰《ES6標準入門》WeakMap說到 :某個鍵名是否存在完全不可預測,和垃圾回收機制運行是否運行相關,這一刻可以取到鍵名,下一刻垃圾回收機制突然運行,這個鍵就消失了。
b = null 等于通知垃圾回收例程將其清除
垃圾回收是周期性的,應該是還沒有執(zhí)行垃圾回收。

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

我測試的

圖片描述

2017年12月1日 20:28