前端开发,热爱生活
var call = function(x) {
console.log(x++);
setTimeout(function() { call(x); }, 1);
};
call(0);
以这段代码为例,的确x这个变量会一直存在在内存之中,但这么一个变量还不至于让内存达到溢
出。并且可以在chrome Dev Tool中模拟一次垃圾回收结果:
可以看到js heap一直在增加可以看到js heap一直在增加
但是console 依然在跑,其实这已经算是内存泄露了。但是console 依然在跑,其实这已经算是内存泄露了。
如果内存会周期性地按时增长,泄露最终将导致浏览器变慢或者停止执行脚本。从性能优化角度来讲已经是不得不做的事情了。是想如果循环执行的代码中包含了一个大数组new Array(1000000).join('*'),那是非常危险的。
一般setTimeout递归是在做轮询,这会需要给一个结束条件,执行clearTimeout。