美文网首页
js 闭包的内存泄漏解决方法

js 闭包的内存泄漏解决方法

作者: 小李不小 | 来源:发表于2020-10-21 15:41 被阅读0次

什么是内存泄露?

本质上,内存泄露可以定义为:应用程序不再需要占用内存的时候,由于某些原因,内存没有被操作系统或可用内存池回收。编程语言管理内存的方式各不相同。只有开发者最清楚哪些内存不需要了,操作系统可以回收。一些编程语言提供了语言特性,可以帮助开发者做此类事情。另一些则寄希望于开发者对内存是否需要清晰明了。

三种类型的常见 JavaScript 内存泄露

  • 1:意外的全局变量
  • 2:被遗忘的计时器或回调函数
  • 3:脱离 DOM 的引用
  • 4:闭包

1 存在内存泄露问题的代码

循环p元素的时候,会在存在中产生一个副本p,不销毁的,会一直存在于内中,造成占内存。

####html
<p class="example1">使用 class="example1" 的标题</p>
<p class="example">使用 class="example" 的段落</p> 

####js
let ps=document.querySelectorAll('p')
ps.forEach(function(item){

    item.addEventListener('click',function(){
                let cls=item.getAttribute('class');
        // console.log(item.getAttribute('class'));
        console.log(cls)
    })
})

2 优化方案

当循环开始,把想要获取的class 用变量保存起来,然后等循环结束之后,把内存的副本p清空掉,这样副本就不会存在,然后获取class也不会手影响。

####html
<p class="example1">使用 class="example1" 的标题</p>
<p class="example">使用 class="example" 的段落</p> 

####js
let ps=document.querySelectorAll('p')
ps.forEach(function(item){  //循环地址,会在内存中复制一个p的副本,相当于存在两种p元素了
let cls=item.getAttribute('class');
    item.addEventListener('click',function(){
        // console.log(item.getAttribute('class'));
        console.log(cls)
    })
    item=null
})

效果图

image.png

相关文章

  • js 闭包的内存泄漏解决方法

    什么是内存泄露? 本质上,内存泄露可以定义为:应用程序不再需要占用内存的时候,由于某些原因,内存没有被操作系统或可...

  • iOS内存泄漏易错点

    问题 记录一个内存泄漏的案例,闭包引用自己或者多个对象,导致对象无法正常销毁,从而导致内存泄漏。 上面例子的闭包中...

  • JS闭包与内存泄漏

    内存泄露是指你「用不到」(访问不到)的变量,依然占居着内存空间,不能被再次利用起来。闭包里面的变量就是我们需要的变...

  • 闭包1(基础)

    (什么是闭包?闭包的作用?闭包的缺陷?) (闭包的几种可能的应用场景) (闭包与内存泄漏,有关闭包的面试题) 推荐...

  • 什么是闭包?闭包的好处是什么?

    什么是闭包,闭包的好处 闭包 : 再函数外部可以访问函数内部的变量 好处: 坏处: 容易造成内存泄漏 闭包的相关应...

  • 深入JavaScript Day04 - 闭包、this的四种绑

    一、闭包补充 1、闭包是如何导致内存泄漏的?如何解决? window【持有】了闭包函数,闭包函数【持有】了父级AO...

  • 闭包及获取内部方法

    闭包获取内部方法。 闭包的概念 作用域、作用域链(防止内存泄漏) 避免泄漏,写在匿名函数中,模仿块级作用域。这样匿...

  • 闭包和内存泄漏

    作者: 叶茂;标签: 闭包,内存泄漏 序章 词法作用域:作用域是由书写代码时函数声明的位置决定的。 闭包 闭包就是...

  • 闭包的作用

    闭包:内部函数保存到外部 当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造成内存泄漏(内存...

  • 闭包

    闭包:外层函数能够访问内层变量的函数,缺点就是容易造成内存泄漏。

网友评论

      本文标题:js 闭包的内存泄漏解决方法

      本文链接:https://www.haomeiwen.com/subject/afuipktx.html