前端八股 7

垃圾回收机制

系统周期性地找出暂时不再使用的变量的机制,释放其内存的机制

方法:古老引用计数法

创建一张引用表记录各种资源被引用的次数,当引用次数为0就回收

问题:当有两个对象互相引用时会造成内存泄漏

比如:

function A(){
B()
}
function B(){
A()

这样函数A和函数B互相引用,A和B的引用数永远大于等于1,内存不会被释放,内存泄漏

标记清除法

当变量进入执行环境时,标记该变量为“进入环境”,当变量离开环境时,标记为“离开环境”

常见内存泄漏情况

1.函数中直接定义全局变量

function foo(arg) {
    bar = "this is a hidden global variable";
}

2.定时器函数
var someResource = getData();
setInterval(function() {
var node = document.getElementById(‘Node’);
if(node) {
// 处理 node 和 someResource
node.innerHTML = JSON.stringify(someResource));
}
}, 1000);

如果清除node指向的DOM元素,内部函数仍旧使用someResource变量造成内存泄漏

你可能感兴趣的:(前端,面经,前端)