JS的内存空间
变量对象与引用数据
概念解释
对于基本数据类型Undefined
、Null
、Boolean
、Number
、String
往往保存在变量对象中
而对于引用数据类型,如Array
、String
、Object
等,他们在变量对象中存的是它们在堆内存中的地址,就相当于给我们了一把钥匙,去堆内存中找到所需要的值。
相关问题
var m = { a: 10, b: 20 }
var n = m;
n.a = 15;
拿这个例子来说,因为{ a: 10, b: 20 }
是一个对象,所以变量对象m是对它的一个引用,它的具体值是一个地址名,如0x0012ff7d。
所以var n = m ;
时,就是把这个地址名赋值给了变量对象n,就是说这时,n和m同时是存在堆内存中的对象 { a: 10, b: 20 }
的引用。所以n.a = 15 ;
实际上是将堆内存中的a的value变成了10,所以理所当然,m.a也就为10了。
内存释放
变量对象内存的生命周期
1. 分配你所需要的内存
2. 使用分配到的内存(读、写)
3. 不需要时将其释放、归还
#####如何释放?
局部作用域
函数执行完毕后垃圾收集器自行回收
全局作用域
在JavaScript中,最常用的是通过标记清除的算法来找到哪些对象是不再继续使用的,因此
a = null
其实仅仅只是做了一个释放引用的操作,让 a 原本对应的值失去引用,脱离执行环境,这个值会在下一次垃圾收集器执行操作时被找到并释放。而在适当的时候解除引用,是为页面获得更好性能的一个重要方式。
总结一下:
JS没有指针,但指针又在其中。对于引用数据类型就相当于是指针,变量对象就相当于一个指针对象,n.a可以近似与p->a。
而对于内存释放来说,完成使命的变量可以通过设置为Null进行标记,从而让垃圾收集器更好的回收...
参考文章:https://yangbo5207.github.io/wutongluo/ji-chu-jin-jie-xi-lie/yi-3001-nei-cun-kong-jian-xiang-jie.html?q=
最新文章
- 4.AE中的缩放,书签
- ES6笔记一
- 英文VS2010安装中文版MSDN文档方法
- InnoDB Plugin文件格式(概述)
- ASP.NET制作一个简单的等待窗口
- 获取本机外网ip和内网ip
- 使用SndPlaySound从内存中播放WAV
- less基本语法
- angularJs学习笔记-入门
- 关于EL表达式的学习总结
- 【Clojure 基本知识】 ns宏的 指令(关键字) requrie的用法
- install ubuntu env
- RN NetInfo使用
- Django后台管理系统讲解及使用
- 【教程】手写简易web服务器
- 20165205 2017-2018-2 《Java程序设计》实验二 Java面向对象程序设计
- 如何通过Html网页调用本地安卓app?
- java.io.ByteArrayOutputStream 源码分析
- Mac 下如何下载、启动和关闭Tomcat 和管理Mac自带的Apache
- 使用IntelliJ IDEA进行Python远程调试的需求(未完)
热门文章
- struts2与常用表格ajax操作的json传值问题
- CSS+DIV命名
- Python之字符串计算(计算器)
- python爬虫框架—Scrapy安装及创建项目
- bzoj1455左偏树裸题
- Overload重載和Override重写的区别。Overloaded的方法是否可以改变返回值的类型?
- 理解javascript中的Array类型
- jQuery_计算器实例
- [POJ3463] Sightseeing(次短路 Heap + Dijkstra)
- Bzoj3060 [Poi2012]Tour de Byteotia