zoukankan      html  css  js  c++  java
  • 闭包

    先看看简单的栗子

    function fn1(){
        var n=999;
        function fn2(){
            alert(n); 
        }
        return fn2;
    }
    var result=fn1();
    result(); // 999    

    啥是闭包??

    网友答:

    1. 闭包就是能够读取其他函数内部变量的函数
    2. 闭包归根结底个人认为只是一个作用域链的不同吧,其实理解了作用域链个人感觉不是太难
    3. 闭包就是将函数内部和函数外部连接起来的一座桥梁

    其实也正如大家所言,闭包就是能够读取到函数内部的变量,同时让这些变量处于内存当中,不会被垃圾回收机制所回收。也正因此闭包也有缺点,浪费内存,所以要在退出函数后,将局部变量删除。不要随便在父函数外部改变父函数内部的变量。

    摘抄几段话

    • 只要存在调用内部函数的可能,JavaScript就需要保留被引用的函数。而且JavaScript运行时需要跟踪引用这个内部函数的所有变量,直到最后一个变量废弃,JavaScript的垃圾收集器才能释放相应的内存空间
    • 当内部函数在定义它的作用域的外部被引用时,就创建了该内部函数的一个闭包。这种情况下我们称既不是内部函数局部变量,也不是其参数的变量为自由变量,称外部函数的调用环境为封闭闭包的环境
    • 从本质上讲,如果内部函数引用了位于外部函数中的变量,相当于授权该变量能够被延迟使用。因此,当外部函数调用完成后,这些变量的内存不会被释放(最后的值会保存),闭包仍然需要使用它们
    • 对外部函数的调用会创建这些闭包的新实例,同时也会创建新的封闭环境,本质上是创建了一个新对象,自由变量就是这个对象的实例变量,而闭包就是这个对象的实例方法

    参考文章一、

  • 相关阅读:
    梅森素数
    高精度乘法
    快速幂取模
    高精度加法
    Linux 压缩&解压缩
    Lec_Cloud资源云平台
    IP102,IP102-K_V3.0 输入节点机
    A7互动主机
    音频处理器的使用
    关于测试随笔
  • 原文地址:https://www.cnblogs.com/fire-passiontao/p/5942848.html
Copyright © 2011-2022 走看看