zoukankan      html  css  js  c++  java
  • Javascript 闭包何时回收?

    定义

    闭包是函数和声明该函数的词法环境的组合。
    闭包是指有权访问另一个函数作用域中的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量。

    范例

    function fnTest(_i) {
        var i = _i;
        function fnAdd() {
            console.log(i++);
        }
        return fnAdd;
    }
    var fun = fnTest(100);
    fun(); //100,i常驻内存
    fun(); //101,i常驻内存
    fun(); //102,i常驻内存
    fun=null; // i被GC回收

    javascript的垃圾回收原理

    1. 在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收;
    2. 如果两个对象互相引用,但不被第三者引用,那么这两个互相引用的对象会被回收。

    闭包优点

    1. 可以将一个变量长期驻留在内存中
    2. 模拟私有方法,避免受到全局变量的污染
    在面向对象编程语言中,比如 Java,支持将方法声明为私有的,即它们只能被同一个类中的其它方法所调用。
    而 JavaScript没有这种原生支持,但我们可以使用闭包来模拟私有方法。私有方法不仅仅有利于限制对代码的访问:还提供了管理全局命名空间的强大能力,避免非核心的方法弄乱了代码的公共接口部分。

    闭包缺点

    常驻内存,会增大内存使用量,使用不当容易造成内存泄露。

    Javascript 闭包何时回收?

    将不再使用的闭包实例手工删除

    参考资料

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
    https://www.cnblogs.com/wangyingblog/p/5569745.html

  • 相关阅读:
    [题解]小X的液体混合
    [题解]图的遍历
    [模板]基本线段树操作
    C#中 Excel列字母与数字的相互转换
    Oracle 查询数据库表大小
    vi/vim 编辑、搜索、查找、定位
    Linux 中 sqlite3 基本操作
    MessageBox.Show 消息提示框显示到窗口最顶层
    Docker bash: ping: command not found 解决方法
    PLSQL F8执行单条SQL
  • 原文地址:https://www.cnblogs.com/jinzesudawei/p/8526197.html
Copyright © 2011-2022 走看看