• JS闭包


    1. 如何产生闭包?
      * 当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时, 就产生了闭包
    2. 闭包到底是什么?
      * 使用chrome调试查看
      * 理解一: 闭包是嵌套的内部函数
      * 理解二: 包含被引用变量(函数)的对象
      * 注意: 闭包存在于嵌套的内部函数中
    3. 产生闭包的条件?
      * 函数嵌套
      * 内部函数引用了外部函数的数据(变量/函数)
     function fn1 () {
    //闭包开始产生
    var a = 3 function fn2 () { console.log(a)
        a++; }
      return fn2 } var f = fn1()//外部函数使用了内部变量,外部变量一直引用着fn1
    f()//3
    f()//4
    f()//5
    f = null;//闭包死亡(引用闭包的函数对象被回收)

     闭包给window添加属性

    /**
     * 自定义模块2
     */
    (function (window) {
      //私有的数据
      var msg = 'atguigu'
      var names = ['I', 'Love', 'you']
      //操作数据的函数
      function a() {
        console.log(msg.toUpperCase())
      }
      function b() {
        console.log(names.join(' '))
      }
    
      window.coolModule2 =  {
        doSomething: a,
        doOtherthing: b
      }
    })(window)

    向外部暴露多个函数

    /**
     * 自定义模块1
     */
    function coolModule() {
      //私有的数据
      var msg = 'atguigu'
      var names = ['I', 'Love', 'you']
    
      //私有的操作数据的函数
      function doSomething() {
        console.log(msg.toUpperCase())
      }
      function doOtherthing() {
        console.log(names.join(' '))
      }
    
      //向外暴露包含多个方法的对象
      return {
        doSomething: doSomething,
        doOtherthing: doOtherthing
      }
    }

     闭包缺点:

    <!--
    1. 缺点
      * 函数执行完后, 函数内的局部变量没有释放, 占用内存时间会变长
      * 容易造成内存泄露
    2. 解决
      * 能不用闭包就不用
      * 及时释放
    -->
    <script type="text/javascript">
      function fn1() {
        var a = 2;
    
        function fn2() {
          a++;
          console.log(a);
        }
    
        return fn2;
      }
      var f = fn1();
    
      f(); // 3
      f(); // 4
    
      f = null // 释放
    </script>
    穷则独善其身,达则兼济天下……
  • 相关阅读:
    JS Array转JSON
    js数组转字符串并用,分割
    java枚举类-根据key获取value及根据value获取key
    CSS文件引入顺序
    git pull之前要先commit
    FastJson中@JSONField注解使用
    @JsonFormat与@DateTimeFormat注解的使用
    Jackson 时间格式化,时间注解 @JsonFormat 用法、时差问题说明
    shell脚本使用
    ubuntu12.04 安装redis
  • 原文地址:https://www.cnblogs.com/hmy-666/p/14432795.html
Copyright © 2020-2023  润新知