一起来分析JavaScript中的弱引用和强引用

本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了关于弱引用与强引用的相关问题,包括了什么是弱引用与强引用以及弱引用的特性总结等等内容,下面一起来看一下,希望对大家有帮助。

一起来分析JavaScript中的弱引用和强引用

【相关推荐:javascript视频教程、web前端】

什么是弱引用和强引用

JavaScript 中强引用:对象的引用在 JavaScript 中是强引用,也就是将一个引用对象通过变量或常量保存时,那么这个变量或常量就是强引用,这个对象就不会被回收。

JavaScript 中弱引用: WeakMaps 和 WeakSets 是我们在 JavaScript 使用弱引用唯一途径,将一个对象作为键添加到 WeakMap 或 WeakSet 中并不能防止这些对象被回收。

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

举例说明弱引用和强引用

强引用就是一个小孩A牵着一条狗,他们之间通过狗链儿连着。

弱引用就是,旁边有个人B指着A牵的狗,说:嘿,那有条狗,B指向那条狗,但他们之间没有是指绑在一起的东西。

当A放开狗链,狗就会跑掉(被垃圾回收),无论B是不是还指着。

但是,当B不再指着那条狗,狗还被A牵着,不会影响它是否跑掉。
在这里插入图片描述

在JavaScript中演示弱引用和强引用

let people = {name:'张三',age:25}let people1 = people;

在上面的代码中我们将{name:'张三',age:25}赋值给变量people时,在内存中会存在一根线将它们连接起来:

在这里插入图片描述
然后创建people1变量,将people赋值给people1,相当于people1也引用这个对象:
在这里插入图片描述
我们再来看当我们使用ES6新引入的类型WeakSet和WeakMap在存储引用值时,是一种什么样的情况。

let people = {name:'张三',age:25}let people1 = people;let set = new WeakSet();set.add(people);

我们新建了一个WeakSet()实例,通过add方法将添加了people,people对应的引用值是{name:'张三',age:25}。

在这里插入图片描述

卡奥斯智能交互引擎 卡奥斯智能交互引擎

聚焦工业领域的AI搜索引擎工具

卡奥斯智能交互引擎 36 查看详情 卡奥斯智能交互引擎

可以看到:set实例中的值{name:'张三',age:25}引用指向于{name:'张三',age:25}(在实际内存中他指向的是该数据的栈的指针引用,该栈指向对应堆中的对应的那个地址的值)。并且需要特别注意的是,这条弱引用的“线”是透明的,这是什么意思?他和强引用的区别在哪里?

一句话概述:强引用被{name:'张三',age:25}这个引用认可为一个“连接”,而弱引用不被认可。即该引用并不知道它被set实例所引用。

这说明垃圾回收也不知道该引用被set实例所引用。那么如果该引用的所有强引用连接都被断开了(变量被赋值为null或其他情况),那么该引用会被当作垃圾销毁,即使set实例还在引用着该引用。

let people = {name:'张三',age:25}let people1 = people;let set = new WeakSet();set.add(people);people = null;people1 = null;

我们把强引用都断开会出现什么情况呢?

在这里插入图片描述

因为所有的强引用都断开了,那么垃圾回收认为该引用{name:'张三',age:25}不需要了,就会将他销毁。那么对应的set实例所用到的该引用也都不复存在了,即使set实例还在使用着该引用。

弱引用的特性总结

1、WeakSet中对象的引用是弱引用,也就是说,即使weakset“引用”了某个对象,但垃圾回收不把这种引用计为“引用”,只要其他地方没有强引用这个对象,该对象就不可达,任何时刻可能被回收;只能存储引用类型,且不可枚举、不可清除。

2、WeakMap和Map相似,不过不可枚举、不可清空、对key所引用的对象是弱引用。

3、WeakSet 适合临时存放一组对象,以及存放跟对象绑定的信息。只要这些对象在外部消失,它在 WeakSet 里面的引用就会自动消失。 由于上面这个特点,WeakSet 的成员是不适合引用的,因为它会随时消失。

4、强引用有时会忘记取消引用,导致内存无法释放,进而可能会引发内存泄漏。而弱引用,不计入垃圾回收机制,所以就不存在这个问题。

【相关推荐:javascript视频教程、web前端】

以上就是一起来分析JavaScript中的弱引用和强引用的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/551329.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
GTA 4“自由城保护项目”MOD被下架:玩家与开发者之间的博弈
上一篇 2025年11月9日 20:15:45
如何用copendir遍历目录
下一篇 2025年11月9日 20:15:49

相关推荐

  • UC浏览器如何阻止脚本运行_UC浏览器禁用JavaScript功能设置

    UC浏览器如何阻止脚本运行_UC浏览器禁用JavaScript功能设置UC浏览器如何阻止脚本运行_UC浏览器禁用JavaScript功能设置UC浏览器如何阻止脚本运行_UC浏览器禁用JavaScript功能设置UC浏览器如何阻止脚本运行_UC浏览器禁用JavaScript功能设置

    可通过设置禁用JavaScript提升UC浏览器安全与流畅度:一、在高级设置中关闭JavaScript,阻止全局脚本运行;二、对特定网站单独禁用脚本,避免功能异常;三、使用无痕模式削弱第三方脚本权限并自动清除数据。 如果您在浏览网页时遇到页面卡顿、弹窗广告或恶意跳转等问题,可能是由于网页中的脚本代码…

    2026年10月4日 • 用户投稿
    000
  • 谷歌浏览器无法播放视频是什么原因_谷歌浏览器视频播放失败问题排查

    谷歌浏览器无法播放视频是什么原因_谷歌浏览器视频播放失败问题排查谷歌浏览器无法播放视频是什么原因_谷歌浏览器视频播放失败问题排查谷歌浏览器无法播放视频是什么原因_谷歌浏览器视频播放失败问题排查谷歌浏览器无法播放视频是什么原因_谷歌浏览器视频播放失败问题排查

    1、检查并启用JavaScript功能;2、清除浏览器缓存与Cookie;3、调整SameSite Cookie策略;4、禁用硬件加速;5、排查扩展程序干扰,可依次解决谷歌浏览器视频黑屏、无声音或播放失败问题。 如果您尝试在谷歌浏览器中播放在线视频,但出现黑屏、无声音或直接提示播放失败的情况,这通常…

    2026年10月4日 • 用户投稿
    100
  • UC浏览器怎么阻止网站弹窗_UC浏览器强力拦截弹窗广告设置

    UC浏览器怎么阻止网站弹窗_UC浏览器强力拦截弹窗广告设置UC浏览器怎么阻止网站弹窗_UC浏览器强力拦截弹窗广告设置UC浏览器怎么阻止网站弹窗_UC浏览器强力拦截弹窗广告设置UC浏览器怎么阻止网站弹窗_UC浏览器强力拦截弹窗广告设置

    首先开启UC浏览器的阻止弹出窗口功能,再启用广告智能过滤并选择强力模式,接着为顽固网站添加自定义过滤规则,必要时禁用JavaScript运行权限,并确保浏览器已更新至最新版本以获得最佳拦截效果。 如果您在使用UC浏览器时频繁遭遇网站弹窗广告干扰,可能是由于默认的广告拦截功能未完全开启或设置不够严格。…

    2026年10月4日 • 用户投稿
    100
  • 悟空浏览器如何阻止网站跟踪_悟空浏览器开启防跟踪功能保护隐私

    悟空浏览器如何阻止网站跟踪_悟空浏览器开启防跟踪功能保护隐私悟空浏览器如何阻止网站跟踪_悟空浏览器开启防跟踪功能保护隐私悟空浏览器如何阻止网站跟踪_悟空浏览器开启防跟踪功能保护隐私悟空浏览器如何阻止网站跟踪_悟空浏览器开启防跟踪功能保护隐私

    开启防跟踪功能可有效保护隐私。在悟空浏览器中,依次启用“防跟踪保护”、勾选反跟踪广告规则、禁用JavaScript权限,并定期清除浏览数据,防止行为信息被采集。 如果您在浏览网页时发现某些网站能够收集您的行为数据,这可能是因为网站跟踪功能未被禁用。为了保护个人隐私,防止跨站追踪和广告定向监控,您可以…

    2026年10月4日 • 用户投稿
    100
  • 在 Craft CMS 中为急切加载元素定义自定义参数:避免 PHP 语法错误

    本文详细介绍了在 Craft CMS 中使用急切加载(Eager Loading)功能时,如何为关联元素定义自定义查询参数。针对常见的 PHP 语法错误,特别是将 JavaScript 对象字面量语法错误地应用于 PHP 数组的陷阱,本文提供了正确的 PHP 数组表示法示例,确保即使是禁用状态的关联…

    2026年10月4日
    200
  • 谷歌浏览器怎么管理网站权限_谷歌浏览器网站权限设置与管理

    谷歌浏览器怎么管理网站权限_谷歌浏览器网站权限设置与管理谷歌浏览器怎么管理网站权限_谷歌浏览器网站权限设置与管理谷歌浏览器怎么管理网站权限_谷歌浏览器网站权限设置与管理谷歌浏览器怎么管理网站权限_谷歌浏览器网站权限设置与管理

    1、可通过调整谷歌浏览器权限解决网站功能受限问题。首先可针对单个网站,在地址栏锁形图标中修改摄像头、定位等权限;2、通过设置中的隐私与安全选项,批量管理已授权网站,删除不必要的访问许可;3、在网站设置中配置默认全局策略,将敏感权限设为“询问”以加强控制;4、使用隐身模式临时访问不可信站点,关闭窗口后…

    2026年10月3日 • 用户投稿
    300
  • 悟空浏览器网页加载不出来一直转圈_悟空浏览器页面无限加载问题解决方法

    悟空浏览器网页加载不出来一直转圈_悟空浏览器页面无限加载问题解决方法悟空浏览器网页加载不出来一直转圈_悟空浏览器页面无限加载问题解决方法悟空浏览器网页加载不出来一直转圈_悟空浏览器页面无限加载问题解决方法悟空浏览器网页加载不出来一直转圈_悟空浏览器页面无限加载问题解决方法

    首先清除浏览器缓存与数据,再检查网络环境并尝试切换Wi-Fi或蜂窝数据,接着修改DNS为8.8.8.8等公共地址,然后禁用插件或脚本,最后更新或重置悟空浏览器以解决页面转圈问题。 如果您尝试在悟空浏览器中访问某个网页,但页面一直转圈无法加载完成,则可能是由于网络连接、浏览器缓存或DNS解析等问题导致…

    2026年10月3日 • 用户投稿
    300
  • Craft CMS 元素预加载:自定义参数与 PHP 数组语法陷阱解析

    本文深入探讨了在 Craft CMS 中为预加载(Eager-Loaded)元素定义自定义参数的方法,重点解决了一个常见的 PHP 语法错误:在 with() 方法中为关联元素传递参数时,误用 JavaScript 风格的对象字面量 {} 而非正确的 PHP 数组语法 []。通过具体示例,文章演示了…

    2026年10月3日
    100
  • 2025 年 Python 现状:83% 仍在运行旧版,Python Web 开发复兴

    2025 年 Python 现状:83% 仍在运行旧版,Python Web 开发复兴2025 年 Python 现状:83% 仍在运行旧版,Python Web 开发复兴2025 年 Python 现状:83% 仍在运行旧版,Python Web 开发复兴2025 年 Python 现状:83% 仍在运行旧版,Python Web 开发复兴

    第八届年度 python 开发者调查现已正式发布,基于来自全球超过 30,000 名 python 开发者的反馈。本次调研由 python software foundation 联合 jetbrains 的 pycharm 团队共同完成。 2025 年 Python 现状(精简速览)半数 Pyth…

    2026年10月3日 • 用户投稿
    200
  • 反转字符串绕杀软

    反转字符串绕杀软反转字符串绕杀软反转字符串绕杀软反转字符串绕杀软

    在github有一个ssi的项目,项目地址如下:https://github.com/dimopouloselias/simpleshellcodeinjector/他可以实现shellcode的远程加载(十六进制),当然ldrakura也曾经搞过类似的项目(我偷电瓶车养你啊),当时还是一次项目时绕…

    2026年10月2日 • 用户投稿
    100
  • Win10 Chromium Edge新权限:阻止不安全内容

    Win10 Chromium Edge新权限:阻止不安全内容Win10 Chromium Edge新权限:阻止不安全内容Win10 Chromium Edge新权限:阻止不安全内容Win10 Chromium Edge新权限:阻止不安全内容

    和市面上多数其他浏览器一样,基于chromium内核的microsoft edge已经内置了一些规则,用于针对我们访问的每一个网站来设定权限。当然,为了提高操作便捷性,我们也能为所有页面统一配置规则,这样就能保证网站对文件、摄像头、麦克风等资源的访问能够得到妥善处理。 近期,微软在其最新的Canar…

    2026年10月2日 • 用户投稿
    100
  • Js处理滚动条和日期框

    Js处理滚动条和日期框Js处理滚动条和日期框Js处理滚动条和日期框Js处理滚动条和日期框

    文章总览图 此思维导图中的语法要结合文章内容来看,切记不可死读书,要活学活用。 Js处理1.常用的元素基本操作是什么? 四个基本操作。 1.send_keys() 2.click() 3.获取元素的文本内容。 4.获取元素的属性。 find_element_by_xpath()是我们的元素对象。 .…

    2026年10月2日 • 用户投稿
    200
  • JavaScript数据属性值安全转换为数字的专业指南:避免NaN的策略

    本教程详细阐述了在JavaScript中如何安全地将HTML数据属性(data attributes)的值转换为数字,并确保在值无效时返回0,从而有效避免在计算中出现NaN。文章重点介绍了使用parseFloat()而非Number()进行转换,并强调了将|| 0操作符正确放置在转换函数外部的关键性…

    2026年10月2日
    100
  • 夸克浏览器如何禁用JavaScript_夸克浏览器禁用网页JS脚本设置步骤

    夸克浏览器如何禁用JavaScript_夸克浏览器禁用网页JS脚本设置步骤夸克浏览器如何禁用JavaScript_夸克浏览器禁用网页JS脚本设置步骤夸克浏览器如何禁用JavaScript_夸克浏览器禁用网页JS脚本设置步骤夸克浏览器如何禁用JavaScript_夸克浏览器禁用网页JS脚本设置步骤

    1、可在夸克浏览器中通过高级设置关闭JavaScript以提升隐私保护并防止恶意脚本;2、启用无痕模式可临时限制脚本运行;3、通过自定义过滤规则可屏蔽特定JS文件加载。 如果您在浏览网页时遇到页面加载异常或希望提升隐私保护,可能需要禁用JavaScript来阻止某些脚本运行。夸克浏览器提供了对JS脚…

    2026年10月2日 • 用户投稿
    100
  • TP中JS如何获取模板变量(示例详解)

    下面thinkphp框架教程栏目将给大家介绍php框架中js优雅获取模板变量的方式,希望对需要的朋友有所帮助! PHP框架中JS优雅获取模板变量的方式 在使用PHP框架(本文以ThinkPHP为例)进行页面开发的时候,经常遇到需要将控制器方法中的模板变量代入到页面JS内操作的情况,常见的方式如: l…

    2026年10月2日
    100
  • 菜鸟 学注册机编写之 Android app

    菜鸟 学注册机编写之 Android app菜鸟 学注册机编写之 Android app菜鸟 学注册机编写之 Android app菜鸟 学注册机编写之 Android app

    0x00前言 环境及工具: 手机    Nexus 4(己root) 系统版本   Android 5.01 工具    AndroidKiller_V1.2     关于Android平台app注册机的编写网上文章还比较少,而在Windows平台上这方面的教程己经很多了,今天将以一个简单的app为…

    2026年10月1日 • 用户投稿
    200
  • 因Edge文件权限与IE发生冲突可导致XXE攻击

    因Edge文件权限与IE发生冲突可导致XXE攻击因Edge文件权限与IE发生冲突可导致XXE攻击因Edge文件权限与IE发生冲突可导致XXE攻击因Edge文件权限与IE发生冲突可导致XXE攻击

    安全研究员john page在3月27日向发现了微软的一个xxe漏洞并向其报告了具体情况,随后于4月10日发布了漏洞详情。目前,虽然微软还未修复该漏洞,但已发布了一个微密码,可拒绝远程攻击者泄漏本地文件以及限制在本机上的活动。 关于该漏洞,研究人员专门发布了一个视频用于展示如何利用: 漏洞简介 当用…

    2026年10月1日 • 用户投稿
    300
  • Safari浏览器视频加载失败怎么办_Safari视频无法播放问题解决方法

    Safari浏览器视频加载失败怎么办_Safari视频无法播放问题解决方法Safari浏览器视频加载失败怎么办_Safari视频无法播放问题解决方法Safari浏览器视频加载失败怎么办_Safari视频无法播放问题解决方法Safari浏览器视频加载失败怎么办_Safari视频无法播放问题解决方法

    首先清除Safari缓存与网站数据,检查并关闭可能屏蔽视频的扩展程序,确保已启用JavaScript,尝试在无痕浏览模式下播放视频,更新系统与浏览器至最新版本,并更换为公共DNS服务器如8.8.8.8或223.5.5.5以改善解析问题。 如果您在使用Safari浏览器时遇到视频无法加载或播放的问题,…

    2026年10月1日 • 用户投稿
    100
  • 谷歌浏览器页面图片无法显示如何修复

    谷歌浏览器页面图片无法显示如何修复谷歌浏览器页面图片无法显示如何修复谷歌浏览器页面图片无法显示如何修复谷歌浏览器页面图片无法显示如何修复

    当您在谷歌浏览器中浏览网页时,如果遇到图片无法正常显示,出现空白占位符或加载失败的图标,这通常是由于浏览器设置、缓存数据损坏、扩展程序干扰或JavaScript被禁用所导致的。本文将提供一套详细的排查方案,通过逐步检查和调整,帮助您恢复网页图片的正常显示。 检查图片显示设置 1、首先,最直接的原因可…

    2026年9月30日 • 用户投稿
    200
  • R包降级也不全是那么简单

    R包降级也不全是那么简单R包降级也不全是那么简单R包降级也不全是那么简单R包降级也不全是那么简单

    如果你是windows用户,可能会遇到make缺失的错误,如下图所示: 尽管我已经多年未使用Windows,但解决这个问题其实非常简单,只需通过谷歌搜索即可找到答案: 实际上,这是由于rtools缺失导致的问题。Windows用户只需下载适合的rtools版本并安装即可解决。 下载并安装Rtools…

    2026年9月30日 • 用户投稿
    200

发表回复

登录后才能评论
关注微信