在前面的内容中,我们的程序中是否存在内存泄漏呢?我们详细来讲讲。

当然存在内存泄漏了,虽然我们的Javascript语言给出了GC垃圾回收器,但是对于上面图片中的内容。因为fn函数被相互调用,所以内存只要不手动清除是永远不会消失的。 这样相互调用的函数多了,那么就会出现内存泄漏。
var height = 1.88
function other(){
var age = 18;
function inner(){
var name = "name";
debugger;
console.log(name,age,height);
}
return inner;
}
var fn = other();
fn();在上面代码中,fn变量对Function Object(inner oxb00)是存在引用的,而inner对象又对AO1有引用。
对于V8引擎来说是不会帮我们自动清理些相互调用的内存的,那我们要如何解决呢?
解决内存泄漏
将fn函数设置为null就可以了。

闭包的内存泄漏测试
我们看一下下面代码:
function testArray(){
var arr = new Array(1024*1024).fill(1)
return function(){
console.log(arr)
}
}
var arr = []
var createBtnEl = document.querySelector(".create")
var destroyBtnEl = document.querySelector(".destroy")
createBtnEl.onclick = function(){
for(var i=0;i<100;i++){
arr.push(testArray())
}
}
destroyBtnEl.onclick = function(){
arr = []
}上面代码自己测试吧!
AO不适用的属性优化
我们来研究一个问题:AO对象不会被销毁时,是否里面的所有属性都不会被释放?
下面这段代码中的name属于闭包的父作用域里面的变量。
我们知道形成闭包之后count一定不会被销毁,那么那么会不会被销毁。这里给你这段代码自己运行所示吧!
function makeAdder(count){
let name = "why"
return function(num){
debugger
return count + num
}
}
const add10 = makeAdder(10)
console.log(add10(5))
console.log(add10(8))感谢大家观看
我热爱 旅游专栏。令人惊艳了解路线。
欣赏你的照片, 我明白, 世界很美。感谢 旅行灵感。
读起来像小说。继续保持 带来的灵感。
让人精神焕发的 帖子! 我准备订票了。
以后焦虑了或者迷茫了记得回来看看
我非常喜欢 出行博客。鼓舞人心查看路线。
你们的博客 百分百 帮助选择路线。坚持!
信息丰富的 出行资源! 越来越棒!
My brother suggested I might like this blog. He was entirely right. This post actually made my day. You cann't imagine just how much time I had spent for this information! Thanks!
我热爱, 写得很实在。你的博客 就是 最好的例子。很出色。