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

理解js闭包,原型,原型链

闭包

一个函数嵌套了另一个函数,内部函数引用了外部函数的变量,这样,当外部函数在执行环境中执行完毕后,因为某个变量被引用就无法被GC回收,导致这个变量会一直保持在内存中不能被释放。因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会徒增内存消耗!
应用场景:
想要保存某个变量:比如循环给多个li元素绑定点击事件,使被点击时弹出li的index值或者将某函数中的变量i一直存在于内存中,每次执行点击,都会给i自加1

function a(){var n = 0;function inc() {n++;console.log(n);}inc(); inc(); 
}
a(); //控制台输出1,再输出2
function a(){var n = 0;this.inc = function () {n++; console.log(n);};
}
var c = new a();
c.inc();  //控制台输出1
c.inc();  //控制台输出2
function a(){var n = 0;function inc(){n++; console.log(n);}return inc;
}
var c = a();
c();  //控制台输出1
c();  //控制台输出2
Javascript的垃圾回收机制

在Javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收。如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收。因为函数a被b引用,b又被a外的c引用,这就是为什么函数a执行后不会被回收的原因。

http://www.lryc.cn/news/513318.html

相关文章:

  • linux tar 文件解压压缩
  • 【SQL server】教材数据库(5)
  • Oracle 11G还有新BUG?ORACLE 表空间迷案!
  • java实现预览服务器文件,不进行下载,并增加水印效果
  • SAP月结、年结前重点检查事项(后勤与财务模块)
  • MYSQL 高阶语句
  • VS Code中怎样查看某分支的提交历史记录
  • 知识库搭建实战一、(基于 Qianwen 大模型的知识库搭建)
  • ctr方法下载的镜像能用docker save进行保存吗?
  • win32汇编环境下,窗口程序中生成listview列表控件及显示
  • 运维之网络安全抓包—— WireShark 和 tcpdump
  • 【复刻】数字化转型是否赋能企业新质生产力发展?(2015-2023年)
  • 【数据仓库】spark大数据处理框架
  • 2 秒杀系统架构
  • UNI-APP_i18n国际化引入
  • 【详解】AndroidWebView的加载超时处理
  • RedisDesktopManager新版本不再支持SSH连接远程redis后
  • 开源 SOAP over UDP
  • Levenshtein 距离的原理与应用
  • 解决json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
  • hive中的四种排序类型
  • Spring-AI讲解
  • 【brew安装失败】DNS 查询 raw.githubusercontent.com 返回的是 0.0.0.0
  • HTML——29. 音频引入二
  • 代码随想录训练营第三十四天| 62.不同路径 63. 不同路径 II
  • V90伺服PN版组态配置<一>
  • 又一年。。。。。。
  • xterm + vue3 + websocket 终端界面
  • 医疗数仓业务数据采集与同步
  • 数字孪生智慧水利与水务所包含的应用场景有哪些?二者有何区别