先上一段代码感受一下差异:
useEffect(() => {
let person1 = {
name: 'li',
age: 23,
};
const person2 = {
name: 'zhen',
age: 21,
};
// 方式一
const weakMap = new WeakMap();
// 方式二
// const weakMap = new Map();
weakMap.set(person1, 'this is weakMap message1');
weakMap.set(person2, 'this is weakMap message2');
console.log(weakMap);
person1 = null;
console.log(weakMap);
}, []);
然后你会发现两种方式显示结果一模一样,如下图所示
image.png
但是,当你点开这条信息,就会发现,WeakMap里面是空的,只有Map方式点开的内容和显示的内容是一样的。
要理解这个区别,首先得了解JavaScript的内存回收机制。
上个厕所,待会回来
网友评论