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

闭包以及内存泄漏

作者: 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;                                          // 将闭包引用的外部函数中活动对象清除
        }
    
    

    相关文章

      网友评论

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

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