1、什么是垃圾回收浏览器
JS垃圾回收机制的目的是为了防止内存泄漏,内存泄漏是指有一些已经不被须要的变量但仍然存在在内存中,这样便会形成内存泄漏。垃圾回收机制就是为了回收这些不被须要的变量,而且释放掉他们所指向的内存。函数
Java、JavaScript等一些语言有垃圾回收机制,可是C\C++没有。其实我也不是很清楚为何会有这样的区别。请知道的dalao能够评论告诉我一下!!!谢谢么么哒spa
2、JS垃圾回收的方法code
function func() { const a = 1; const b = 1; // 此时变量a, b 分别被标记为 进入环境 } func(); // 函数执行完毕,a, b 被标记为 离开环境,此时a, b 被回收
// 正常的引用计数 function func() { const c = {}; let d = c; // c 被 d 引用一次,c的引用计数为 1 let e = c; // c 被 e 引用一次,c的引用计数为 2 d = {}; // d 再也不引用c,c的引用计数减为 1 e = null; // e 也不在引用c,c的引用计数减为 0,此时c将会被回收 } // 有缺陷的引用计数,内存泄漏 function func() { let f = {}; let g = {}; f.prop = g; g.prop = f; // 因为 f 和 g 相互引用,计数永远不为0 }
3、有可能形成内存泄漏的案例blog
var elements = { txt: document.getElementById('test'); } function fn(){ elements.txt.innerHTML = '11111'; } function removeTxt(){ document.body.removeChild(document.getElementById('test')); } fn(); removeTxt(); console.log(element.txt); // <div id='test'>11111</div> // 虽然咱们已经移除了id为text的元素,但咱们认为没法对此进行回收。