程序员鸡皮
文章 分类 评论
114 3 31

站点介绍

一名PHP全栈程序员的日常......

闭包的内存分析和解决

abzzp 2026-02-08 4 0条评论 前端 前端

首页 / 正文
本站是作为记录一名北漂程序员编程学习以及日常的博客,欢迎添加微信BmzhbjzhB咨询交流......

发布于2024-07-04

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

 title=

当然存在内存泄漏了,虽然我们的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就可以了。

 title=

闭包的内存泄漏测试

我们看一下下面代码:

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))

感谢大家观看

评论(0)

最新评论

  • 城市教堂

    我热爱 旅游专栏。令人惊艳了解路线。

  • 湖山風光

    欣赏你的照片, 我明白, 世界很美。感谢 旅行灵感。

  • 古競技場

    读起来像小说。继续保持 带来的灵感。

  • 奧運聖火

    让人精神焕发的 帖子! 我准备订票了。

  • abzzp

    以后焦虑了或者迷茫了记得回来看看[[流泪]]

  • 三十三瀑布

    我非常喜欢 出行博客。鼓舞人心查看路线。

  • 天星碼頭

    你们的博客 百分百 帮助选择路线。坚持!

  • 日落鼓掌

    信息丰富的 出行资源! 越来越棒!

  • digital banking

    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!

  • 碧海藍灣

    我热爱, 写得很实在。你的博客 就是 最好的例子。很出色。

日历

2026年02月

1234567
891011121314
15161718192021
22232425262728

文章目录

站点公告
本站是作为记录一名北漂程序员编程学习以及日常的博客,欢迎添加微信BmzhbjzhB咨询交流......
点击小铃铛关闭
配色方案