销毁闭包

作者: 极客传 | 来源:发表于2019-03-07 22:18 被阅读2次

先来看一个闭包的例子:

function assignHandler () {
  var element = document.getElementById("someElement");
  element.onclick = function () {
    alert(element.id);
  }
}

根据浏览器垃圾回收机制中的引用计数策略可知,这里的引用类型 someElement 被赋值给了变量 element,而 element 变量又被事件处理函数引用,dom 对象的引用计数是 2,这样就形成了循环引用,当事件处理函数被多次调用时,就会导致大量内存无法被回收。

引用计数的含义是,跟踪记录每个值被引用的次数。当声明一个变量并将一个引用类型的值赋给该变量时,这个值的引用次数就是1,如果这个值再被赋值给另一个变量,则引用次数加1。相反,如果一个变量脱离了该值的引用,则该值引用次数减1,当次数为0时,就会等待垃圾收集器的回收。

在前端性能优化中,我们通常将不再需要的变量置空,让浏览器垃圾回收机制回收,避免占内存。这里也可以通过将变量设置为 null,来清除循环引用。

window.onload = function () {
    var element = document.getElementById("someElement");
    var id = element .id;
    element .onclick = function () {
        alert(id); 
    }
    element = null;
}

.


【1】《JavaScript高级程序设计》
p80
p184

相关文章

  • 销毁闭包

    先来看一个闭包的例子: 根据浏览器垃圾回收机制中的引用计数策略可知,这里的引用类型 someElement 被赋值...

  • RxSwift-Disposable

    sink 销毁响应关系subscription create创建闭包回调里面创建的销毁者 1、subscribe(...

  • 闭包

    闭包: 就是函数嵌套函数,内部函数就是闭包正常情况下,函数执行完成,内部函数就会销毁,释放内存空间,闭包,内部函数...

  • 闭包,原型链,继承,AJAX请求步骤等javaScript基础

    1.关于闭包 什么是闭包? 闭包是有权限访问其它函数作用域内的变量的一个函数。闭包概念:形成一个[不被销毁]的[私...

  • 前端开发性能优化方法

    前端开发性能优化方案 在js中尽量减少闭包的使用(闭包会产生不销毁的作用域不销毁的栈内存)循环给元素做事件绑定的时...

  • JS-闭包

    0.闭包 理解闭包的关键在于:外部函数调用之后其变量对象本应该被销毁,但闭包的存在使得我们仍旧可以访问外部函数的变...

  • 第五章 闭包

    什么是闭包 只要一个函数不在他本身的词法作用域中运行,就是一个闭包 闭包也就是函数所在的词法作用域不会被销毁ima...

  • 02.【JS读书笔记】循环和闭包

    作用域闭包 通常来说,foo()函数执行后,其整个内部作用域都会被销毁(垃圾回收机制),而闭包的“神奇”之处正是可...

  • iOS内存泄漏易错点

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

  • RxSwift <8> —— dispose源码解析

    *销毁者 dispose上代码: 初始化就是保存了响应回调闭包 进入源码 创建了一个匿名销毁者 Anonymous...

网友评论

    本文标题:销毁闭包

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