闭包为什么不会被垃圾回收机制回收
1.什么是垃圾回收机制?它是怎么工作的?
那就要知道什么是垃圾,垃圾就是没有被引用的对象,或者是几个对象相互引用形成一个闭环,但是从根上访问不到也是垃圾.他们就会被清除.
标记-清除
1.垃圾回收器获取根并标记他们
2.然后垃圾回收器访问并标记所有来自根的引用
3.然后垃圾回收器访问被标记的对象,并标记他们的引用,防止二遍访问
4.重复上面的步骤直到出现未被标记的引用出现
5.最后删除所有未被标记的对象
2.什么是根?
根就是一组基本的可达值,他们不会被删除1.全局变量2.本地函数的参数和变量3.当前在调用链上的其他函数的参数和变量
3.什么是可达值
可达值是js内存管理里最主要的概念,他就是指以某种方式可访问或可调用的一些值,它会被保存在内存中
4.什么是闭包
闭包就是函数套函数
在闭包里面,内部的函数可以访问到外部函数作用域内的变量,但是外部的函数不能访问内部函数作用域内的变量
function a() {var num = 0;function b() {console.log(++num);};return b;
};
var c = a();
c() // 1
c() //2
以前不明白为什么它会每次递加,因为a函数被存进了变量c 他是全局变量,不会被垃圾回收机制回收,
下次再调用C()的时候c的值在内存中保存,所以每次都是在原有的基础上加一
function two() {var a = 1;return function() {a++;console.log(a);};
};two() //2
two() //2
因为这个函数执行完 就销毁了,下次在调用的时候又是一次新的调用跟一起没有关系,所以无论调多少次都是2
5.为什么闭包不会被回收
因为他本身就是建立在一个函数的内部作用域的子函数,由于可访问上级作用域的原因,即使上级函数执行完,作用域也不会被清除,这时子函数,就是闭包,就拥有了访问上级作用域中变量的权限,即使上级函数执行完,作用域内的值也不会被销毁
自己的一些笔记,不对之处请指出,不喜勿喷
闭包为什么不会被垃圾回收机制回收相关推荐
- 复习Javascript专题(二):闭包,内存,以及垃圾回收机制
1.什么是闭包?闭包有啥特性以及存在什么问题? 概念:闭包是指有权访问另一个函数作用域中的变量的函数.下面的outer就形成了一个闭包: function outer(){const name='na ...
- js垃圾回收机制,内存泄露和内存溢出,解决闭包产生的内存泄露详解
一.内存的周期和回收机制 分配内存----->使用内存----->释放内存 1.JS 环境中分配的内存有如下声明周期: 内存分配:当我们声明变量.函数.对象的时候,系统会自动为他们分配内存 ...
- 前端面试常考题:JS垃圾回收机制
摘要:众所周知,应用程序在运行过程中需要占用一定的内存空间,且在运行过后就必须将不再用到的内存释放掉,否则就会出现下图中内存的占用持续升高的情况,一方面会影响程序的运行速度,另一方面严重的话则会导致整 ...
- 理解闭包 js回收机制
为什么要有回收机制?why? 打个比方,我有一个内存卡,这个内存是8G的,我把文件,视频,音乐,都保存到了这个内存卡,随着我的储存的内容越来越多,这个内存卡已经保存不了了,如果我还想再把其他的文件保存 ...
- JavaScript进阶(十五):JS 垃圾回收机制
文章目录 一.前言 二.JavaScript 中的内存管理 三.全停顿(Stop The World ) 3.1 JavaScript 中的垃圾回收 3.1.1 引用计数 3.1.2 标记清除(Mar ...
- java 强制垃圾回收_Java垃圾回收机制
Java垃圾回收机制 垃圾回收机制用到finalize.当程序创建对象.数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存中,当这块内存不再被任何引用变量引用时,这块内存 ...
- JAVA垃圾回收机制-史上最容易理解看这一篇就够了
目录 1. JDK构成 2. JAVA执行过程 2.1 第一步:编译阶段 2.2 第二步:运行阶段 3. JAVA内存管理 3.1 JAVA的内存模型 3.2 JVM1.7和1.8区别 3.3 JAV ...
- python的垃圾处理机制_Python语法入门之垃圾回收机制
一 引入 解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个变量值没有用了(简称垃圾)就应该将其占用的内存给回收掉,那 ...
- Java GC垃圾回收机制
Java提供了gc机制,jvm 中,程序计数器.虚拟机栈.本地方法栈都是随线程而生随线程而灭,栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理,因此,我们的内存垃圾回收主要集中于 jav ...
最新文章
- java camel dsl,Apache Camel与Spring DSL
- how is CRM One Order date range finally converted to OPEN SQL
- [摘抄]MySQL数据库系统的常规管理介绍
- 浅谈Windows下SVN在Android Studio中的配置、基本使用及解除关联
- python中bool函数的用法_python3实战python函数每日一讲 - bool([x])
- virtualenv创建独立的Python环境
- 【OCR技术】字符识别技术总览
- SpringBoot高级篇JdbcTemplate之数据查询上篇
- python case when用法_oracle菜鸟学习之 select case when的使用
- SimpleSniffer—ReadMe
- win7快捷方式去箭头_【初级会计】作为会计的你必须知道的快捷方式
- python[爬虫]爬取百万条新浪新闻 新浪滚动新闻中心(多进程)
- 阿里云盘登录空白问题解决
- 前端和后端到底有什么区别?待遇和前景如何?
- ASEMI大功率LED驱动器整流桥KBP210
- Vray室内日间渲染蓝海创意云
- 聚类算法模型评价指标
- 碧云九歌属于哪款服务器,碧云九歌官网版
- 金蝶ERP二次开发笔记(二)----ID相关处理
- python 圆周率,用python计算圆周率π