当前位置: 首页 > news >正文

js 强引用 ​弱引用

简介

在 JavaScript 中,​强引用 ​和 弱引用 ​是两种不同的对象引用机制,它们直接影响垃圾回收(Garbage Collection)的行为。

强引用

  • 定义:默认的引用类型。​只要任意一个地方存在强引用指向某对象,垃圾回收器就不会回收该对象。
  • ​特点:
    • 对象会被保留在内存中,直到所有强引用都断开(例如变量被置为 null,或超出作用域),才会被垃圾回收
    • 常见的强引用包括变量、数组、对象属性、Map 中的键值对、Set 中的元素等
let obj = { data: "强引用对象" }; // obj 是强引用
const map = new Map();
map.set(obj, "关联数据"); // Map 中的键也是强引用

obj = null; // 断开 obj 的强引用,但 Map 中仍保留对原对象的强引用!
// 原对象不会被回收,因为 Map 仍然引用它

弱引用

  • 定义:一种不阻止垃圾回收的引用。​如果对象只有弱引用指向它,垃圾回收器可以回收该对象。
  • ​特点:
    • 弱引用不会阻止对象的回收,适合用于临时或可丢弃的数据。
    • 弱引用必须通过特定数据结构实现:WeakMap、WeakSet(ES6+)或 WeakRef(ES2021+)。
    • 不可枚举:无法遍历弱引用集合(如 WeakMap 没有 keys() 或 values() 方法)。
    • 键必须是对象:WeakMap 的键和 WeakSet 的元素必须是对象(原始类型如 string、number 无效)。
let user = { name: "Alice" };
const weakMap = new WeakMap();
weakMap.set(user, "敏感数据"); // weakMap 的键是若引用

user = null; // 断开强引用
// 垃圾回收后,weakMap 中对应的条目会自动删除

在这里插入图片描述

⚠️ 使用注意

  • 弱引用无法保证对象长期存在,因此使用 WeakMap 或 WeakRef 时,​始终要检查对象是否存在​(例如 weakRef.deref())。
  • 过度依赖弱引用可能导致代码难以调试(因为对象可能突然“消失”)。
http://www.dtcms.com/a/100978.html

相关文章:

  • leetcode 28 Find the Index of the First Occurrence in a String
  • uv vs pip 速度实测
  • ENSP学习day12
  • aws(学习笔记第三十七课) lambda调用rekognition(名人视频分析)
  • PHY——LAN8720A 寄存器读写 (二)
  • 前向扩散公式推导细节
  • Matlab自学笔记四十九:类型识别:判断数据的类型和类别
  • 2025/3/20 心得
  • HCIA—— 31 HTTP的报文、请求响应报文、方法、URI和URL
  • 【数据标准】数据标准化框架体系-基础类数据标准
  • 基于Real-Sim-Real循环框架的机器人策略迁移方法
  • react拖拽库dnd-kit
  • 【jQuery】插件
  • 【C++初阶】----模板初阶
  • Flask登录页面后点击按钮在远程CentOS上自动执行一条命令
  • 极速版:栈的内存/局部变量表/堆的内存细分
  • 从 select 到 epoll:拆解 I/O 多路复用的演进与实战
  • Teleport场景及原理
  • Python给对象数组排序
  • J2EE框架技术第七章 反射机制与设计模式
  • 什么是大数据
  • J2EE框架技术 第十章 事务管理技术的应用
  • C语言常用的字符串函数
  • CS(载波监听)机制
  • 【考研】计算机网络
  • “屏幕“的实现_程序中如何将数据映射到硬件_C++实战
  • Linux的shell的前置任务
  • Java网络编程演进:从NIO到Netty的UDP实践全解析
  • Java HMAC加密/解密详解
  • 优化程序命名:提升专业感与用户体验