前端之家收集整理的这篇文章主要介绍了
JavaScript 里 new 出来的对象 怎么销毁它?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
<table class="text"><tbody><tr class="li1">
<td class="ln"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
自动内存管理。编写JavaScript程序时
只要管new出对象,JavaScript引擎在底下会通过分析对象图的可到达性来判断对象的存活,进而释放掉已无活引
用的对象。所以要让JavaScript引擎有机会释放掉某个对象,就得确保整个程序里已经没有对那个对象的活引用。
前面有人提到delete运算符,它可以用来
删除变量或
属性,但并不直接涉及
删除/释放对象。如果指向某个对象的
活引用当中有
全局变量或别的对象的
属性,那用delete来
删除掉那些变量或
属性自然是有助减少活引用的个数。
到完全没有活引用指向该对象时,它就能在下次GC的时候被释放掉。
链接:https://www.zhihu.com/questio...
2.在JS里面如果一个对象不被引用,那么这个对象就会被GC回收;在JS里面存在两种作用域:全局作用域和
函数作
用域;
全局变量声明之后,它的生命周期会一直存在,直到全局作用域被销毁,例如浏览器
退出、系统
关闭等。new
出来的对象如果是存在与全局作用域下,只有等全局作用域被销毁,对象才能被销毁。
函数声明之后,等
函数被
调用
了,系统会创建一个执行上下文,开辟一个新的内存区去运行
函数,当
函数执行完毕之后该区域会被回收,new出来的
对象处于
函数作用域内,对象会随着
函数执行完毕,而被回收内存,销毁。
函数作用域里面new出来的对象,被外部变
量所引用了(出现闭包时候),只有等外部变量不在引用
函数作用域内的new出来的对象变量(即外部变量不在使用),
new出来的对象会被销毁