闭包

1.基础知识

  <!-- 闭包:可以访问其他作用域变量的函数就是闭包 -->
    
    <!-- 局部变量 -->
    <script type="text/javascript">
      var num = 100
      function fun() {
        num ++
        console.log('局部变量'+num)
      }
      fun() //局部变量101
      fun() //局部变量102
      fun() //局部变量103
      //当函数fun第一次调用时候:在函数作用域中没有变量num,因此会沿着作用域链向上(全局)查询
      //当函数fun第一次执行的时候,将全局变量num由100变成101
    </script>
    
    <!-- 双重局部变量 -->
    <script type="text/javascript">
      var num = 100
      function aaa(){
        var x = 1;
        function bbb(y){
          // parseInt()方法运行相加,不然这里会输出成字符串拼接
          console.log('双重局部变量' + parseInt(x + y + num))
        }
        bbb(200)
      }
      aaa() //双重局部变量301
      // 不管多少层,要是没有找到相对应的变量,会往上层找变量
    </script>
    
    <!-- 闭包的实用环境 -->
    <script type="text/javascript">
      function aaa(){
        var a = 100
        function bbb() {
          a+=10
          console.log(a)
        }
        return bbb
        // 返回一个函数
      }
      console.log(aaa)
      // 返回一个函数
      var a1 = aaa()
      a1() //110
      a1() //120
      var a2 = aaa()
      a2() //110
      
    </script>

 

posted @ 2021-05-14 17:22  青眼魔术  阅读(39)  评论(0编辑  收藏  举报