首页 > web前端 > js教程 > 正文

JavaScript弱引用_WeakMap与WeakSet使用

夜晨
发布: 2025-11-26 15:29:02
原创
682人浏览过
WeakMap和WeakSet通过弱引用实现对象的私有数据存储与状态标记,键或值仅限对象且不阻止垃圾回收,适用于缓存、避免内存泄漏等场景。

javascript弱引用_weakmap与weakset使用

JavaScript中的弱引用机制主要通过WeakMapWeakSet实现。它们与普通的Map和Set不同,持有的对象引用是“弱”的,不会阻止垃圾回收器回收这些对象。这在处理大量对象或需要避免内存泄漏的场景中非常有用。

WeakMap:键必须是对象的弱引用集合

WeakMap 的键只能是对象(包括函数、数组等),且这些键是弱引用的。当一个对象不再被其他变量引用时,它在 WeakMap 中对应的条目会自动被清除。

常见用途:

  • 私有数据存储:将实例对象作为键,存放其私有属性,不影响对象生命周期
  • 缓存计算结果:以对象为键缓存其衍生数据,对象销毁后缓存自动释放
  • 避免循环引用导致的内存泄漏

示例:

立即学习Java免费学习笔记(深入)”;

const privateData = new WeakMap();
<p>class Person {
constructor(name) {
this.name = name;
privateData.set(this, { createdAt: Date.now() });
}</p><p>getAge() {
return Date.now() - privateData.get(this).createdAt;
}
}
登录后复制

当Person实例被销毁,privateData中对应的数据也会被自动清理。

WeakSet:对象的弱引用集合

WeakSet 只能存储对象,且这些对象是弱引用。它不提供遍历方法,也无法获取当前包含多少对象,只能通过add、delete、has操作。

适用场景:

动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版
动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版

动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包

动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版 508
查看详情 动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版
  • 标记对象状态,比如记录哪些DOM节点正在被动画处理
  • 防止重复处理同一个对象
  • 临时对象管理,对象消失后标记自动失效

示例:

立即学习Java免费学习笔记(深入)”;

const inProgress = new WeakSet();
<p>function animate(element) {
if (inProgress.has(element)) return;
inProgress.add(element);</p><p>// 执行动画
element.animate(...);</p><p>element.onanimationend = () => {
inProgress.delete(element);
};
}
登录后复制

即使忘记调用delete,element被移除后也不会因WeakSet引用而残留。

WeakMap 和 WeakSet 的限制与特点

由于弱引用的特性,它们有一些使用上的限制:

  • 不能遍历:没有forEach、keys()、values()等方法
  • 不支持size属性:无法直接知道有多少条目
  • 键/值必须是对象:原始类型如字符串、数字不能使用
  • 不可预测的清理时机:依赖垃圾回收机制,不能手动触发

这些设计是为了保证不干扰垃圾回收过程。

基本上就这些。WeakMap和WeakSet适合用于辅助性数据结构,尤其是你不想影响对象生命周期的场合。用好了能有效减少内存占用,避免隐性内存泄漏。

以上就是JavaScript弱引用_WeakMap与WeakSet使用的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号