美文网首页
闭包以及内存泄漏

闭包以及内存泄漏

作者: Poppy11 | 来源:发表于2020-07-04 16:55 被阅读0次

闭包通俗点来说就是函数外面访问函数内部的变量

function outer() {
     var  a = '变量1'
     var  inner = function () {
            console.info(a)
     }
     return inner    // inner 就是一个闭包函数,因为他能够访问到outer函数的作用域
}
var  inner = outer()   // 获得inner闭包函数
inner()   //"变量1"


当程序执行完var inner = outer(),其实outer的执行环境并没有被销毁,因为他里面的变量a仍然被被inner的函数作用域链所引用,当程序执行完inner(), 这时候,inner和outer的执行环境才会被销毁调;《JavaScript高级编程》书中建议:由于闭包会携带包含它的函数的作用域,因此会比其他函数占用更多内容,过度使用闭包,会导致内存占用过多。也就是说可用的内存减少,这就是内存泄漏。

如何解决内存泄漏

  • 在退出函数之前,将不使用的局部变量全部删除。可以使变量赋值为null;(示例如下)
 这段代码会导致内存泄露
    window.onload = function(){
        var el = document.getElementById("id");
        el.onclick = function(){
            alert(el.id);
        }
    }
    解决方法为
    window.onload = function(){
        var el = document.getElementById("id");
        var id = el.id;                                      //解除循环引用
        el.onclick = function(){
            alert(id); 
        }
        el = null;                                          // 将闭包引用的外部函数中活动对象清除
    }

相关文章

  • 闭包以及内存泄漏

    闭包通俗点来说就是函数外面访问函数内部的变量 当程序执行完var inner = outer(),其实outer的...

  • iOS内存泄漏易错点

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

  • 闭包1(基础)

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

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

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

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

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

  • 闭包及获取内部方法

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

  • 闭包的作用

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

  • 闭包和内存泄漏

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

  • 闭包

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

  • JavaScript高级程序设计笔记7

    函数表达式 递归 闭包 (1)闭包与变量 (2)关于this对象 (3)内存泄漏 模仿块级作用域 私有变量 (1)...

网友评论

      本文标题:闭包以及内存泄漏

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