您当前的位置首页/JavaScript/ 正文

内存泄漏的原因

admin 最后更新时间 2018-07-06 16:43:32   288浏览
JS有时候也会讨论到内存泄漏的问题,这是不应该的,但的确是这样。 因为JS的解析引擎都具备自动垃圾回收机制,开发人员根本不需要去关注内存释放的问题,但是有一点又特别小心,这是导致内存泄漏的根源。 首先是内存回收的是什么?是不再使用的变量。 这里涉及两个方面,一个是全局,一个是局部。 如果是全局变量,是永远不会被垃圾回收的,除非手动设置变量为null或离开执行环境。 如果是函数内部,那么当函数执行完毕后,不再使用的变量也会被标记为可回收,等待被垃圾回收,最终也会被回收。 这里的不再使用很关键。什么样的变量会被标记为不再使用可以回收? 一般来说函数执行过后,函数内部的变量就好会被标记为可回收,但有一种是不会被回收的。 ``` function a() { var x = 1 var y = 2 console.log(x) function b() { console.log(y) } } a() ``` 以上代码执行候,变量x会被标记为可回收,但是y呢?它不会。因为函数b内部引用了变量y,而且函数b并没有执行,这就导致变量y一直无法被回收,造成内存泄漏。 这种写法也被称为闭包,以实现局部函数的功能。 如果程序内有大量这种代码,就会造成内存不断攀升,最后爆掉。 闭包是个好东西,但是使用闭包要特别注意是否存在这种情况。