当前位置: 首页 > 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())。
  • 过度依赖弱引用可能导致代码难以调试(因为对象可能突然“消失”)。

相关文章:

  • 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框架技术第七章 反射机制与设计模式
  • 丹阳网站建设开发/百度关键词首页排名
  • 画出网站开发项目流程图/百度推广点击软件
  • 做橙光游戏的网站/电商热门关键词
  • 杭州做绒毛鉴定网站/今日热点新闻头条
  • 有没有代做课程设计的网站/百度网盘下载电脑版官方下载
  • 长宁区网站建设/客户管理系统