• 闭包


    闭包形成条件:至少是二个函数,并且是嵌套关系,内部函数还需要访问外部函数的局部变量。

    作用:1,私有变量,保护数据安全。

       2,持久化维持数据。

    function fn() {

      var num = 10;

      inner(n) {

        num = n

      }

      //inner函数可以改变num的值,所以把inner这个函数的功能返回出去

      return inner

    }

    //ret 接收到了fn的返回值inner

    var ret = fn()

    //此时调用ret就是调用了inner,可以改变num的值

    ret(100)

    -------------------------------------------------------------------------------------------------------------------------------

    闭包基本模型

    function out() {

      var num = 20

      return function () {

        num++

        console.log(num)

      }

    }

     ----------------------------------------------------------------------------------------------------------------------------------

    function out ()  {  

      var cache = {}

      function fib (n) {

        //第一个月和第二个月兔子的数量都是一对

        if(n ===1 || n ===2) {

          return 1

        }

        if(cache[n]) {

          return cache[n]

        }else {

          //1,计算兔子数量

          var ret = fil(n-1) + fib(n-2)

          //2,用容器把变量存起来

          cache[n] = ret

          //3,把计算结果返回出去

          return ret;

        }

        return fil(n-1) + fib(n-2)

      }

      //把fib函数作为out函数的返回值

      return fib

    }

    //ret接收fib函数的返回值

    var ret = out()

    //此时调用ret就是调用了fib

    //这个案例用到了递归,缓存,闭包

    全局作用域占用内存,页面关闭或浏览器退出就会释放内存。

    函数作用域占用内存,函数调用结束就释放内存。

    ----------------------------------------------------------------------------------------------------------------------------------

    存取钱案例(闭包)

          function kaiHu() {
        var money = 0;
        function saveMoney(name,num) {
          money += num
          console.log(name + '存入' + num + '余额' + money)
        }
        function  setMoney(name,num) {
          money -= num
          console.log(name + '取出' + num + '余额' + money)
        }
        return {
          saveMoney: saveMoney,
          setMoney: setMoney
        }
      },
     var ret = kaiHu()
    ret.saveMoney('xm',3000)
    ret.setamoney('xm',1000)
  • 相关阅读:
    spring requestbody json
    idea 配置自动编译 livereload
    idea hibernate console 执行hql报错
    查找最小的破坏连续性的数字
    xcopy忽略文件 7zip打包
    window 批处理脚本获取上级目录
    substring c# js java
    R语言中使用多重聚合预测算法(MAPA)进行时间序列分析
    R语言使用最优聚类簇数k-medoids聚类进行客户细分
    R语言中的岭回归、套索回归、主成分回归:线性模型选择和正则化
  • 原文地址:https://www.cnblogs.com/xiaoxiao95/p/12986382.html
Copyright © 2020-2023  润新知