内存空间(堆,栈与队列)
栈:后进先出先进后出,乒乓球盒(执行上下文的执行顺序)
堆:树状结构,与书架与书相似(json)
队列:先进先出,如排队过安检(事件循环)
简单粗暴的认为JavaScript的所有数据都保存在 堆 内存中
JavaScript的执行上下文->变量对象(保存基础数据类型)->存放于堆内存
引用数据类型->存放于堆内存->操作对象的引用->保存在变量对象中的一个地址
JavaScript垃圾收集机制
找出那些不再继续使用的值,然后释放其占用的内存。垃圾收集器每隔固定时间段执行一次释放操作。
JavaScript的内存生命周期
- 分配你所需要的内存
- 使用分配到的内存(读、写)
- 不需要时将其释放、归还
var a = 20; // 在内存中给数值变量分配空间
alert(a + 100); // 使用内存
a = null; // 使用完毕之后,释放内存空间
在JavaScript中,最常用的是通过标记清除的算法来找到哪些对象是不再继续使用的,因此a = null其实仅仅只是做了一个释放引用的操作,让 a 原本对应的值失去引用,脱离执行环境,这个值会在下一次垃圾收集器执行操作时被找到并释放。而在适当的时候解除引用,是为页面获得更好性能的一个重要方式。
局部作用域中,函数执行完毕,局部变量也就没有存在的必要了,因此垃圾收集器很容易做出判断并回收。
但是全局变量什么时候需要自动释放内存空间则很难判断,因此在我们的开发中,需要尽量避免使用全局变量。
浙公网安备 33010602011771号