Javascript基础进阶(四)JS内存释放(垃圾回收)

内存释放(垃圾回收)

1.堆内存

对象数据类型或者函数数据类型在定义的时候都会开辟一个堆内存空间,堆内存有一个引用地址,如果外面有变量指向这个地址,那这个内存就被占用了,则无法被销毁。

如果把所有引用他地址的变量赋值为null,则堆内存释放/销毁。

2.栈内存

栈内存可以理解为作用域。

1.全局作用域

只有当页面关闭的时候全局作用域才会销毁。

2.私有作用域(函数执行会产生私有作用域)

一般情况下,函数执行会形成一个新的私有作用域,当私有作用域中的代码执行完成之后,我们当前的作用域会主动进行释放和销毁。

内存泄漏

JavaScript中最常用的垃圾收集方式是标记清除(mark-and-sweep)。当变量进入环境(例如,在函数中声明一个变量)时,就将这个变量标记为“进入环境”。从逻辑上讲,永远不能释放进入环境的变量所占的内存,因为只要执行流进入相应的环境,就可能用到它们。而当变量离开环境时,这将其 标记为“离开环境”。

虽然JavaScript 会自动垃圾收集,但是如果我们的代码写法不当,会让变量一直处于“进入环境”的状态,无法被回收。
1.全局变量引起的内存泄漏

function leaks(){  
    leak = 'xxxxxx';//leak 成为一个全局变量,不会被回收
}

2.闭包引起的内存泄漏

var leaks = (function(){  
    var leak = 'xxxxxx';// 被闭包所引用,不会被回收
    return function(){
        console.log(leak);
    }
})()

觉得写的不错的小伙伴点赞加关注哦! (=・ω・=)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 30,140评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,573评论 1 32
  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 5,182评论 0 13
  • 《人之彼岸》(郝景芳)中《爱的问题》描述了这么一个家庭:三名(或者四名)成员,母亲早年去世,父亲是人工智能方面的顶...
    无心Carlos阅读 576评论 0 0
  • 今天看的书是贾平凹的<带灯>,这本书是在高铁站选了很久才选择的。今天看到的内容是知道了带灯她是一名女性,这本书就是...
    hanxuerping阅读 296评论 0 0

友情链接更多精彩内容