zoukankan      html  css  js  c++  java
  • 10. 什么是闭包?

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <script type="text/javascript">
      /*
        理解:什么是闭包?
          1.密闭的容器, 类似于set,map容器
          2.闭包是一个对象,存放数据的格式:key:value
        形成的条件:
          1.函数嵌套
          2.内部函数引用外部函数的局部变量
        闭包的优点:
          延长外部函数局部变量的生命周期
        闭包的缺点:
          容易造成内存泄露
        注意点:
          1.合理的使用闭包
          2.用完闭包要及时清除(销毁)
      */
      // 简单的闭包
      function fun(){
        let a=1;
        function b(){
          console.log(a);
        }
        b();
      }
      fun();
      // Global 全局的变量对象
      // Local 函数里面局部的变量对象
    
      //闭包的应用场景
      function fun(){
        let count=1;
        return function(){
          count++;
          console.log(count);
        }
      }
      var fun2=fun();
      fun2();   //2
      fun2();   //3
    
      /* 
        说说它们的输出情况
      */
      function fun(n,o){
        console.log(o)
        return {
          fun:function(m){
            return fun(m,n)
          }
        }
      }
      var a=fun(0)
      a.fun(1)
      a.fun(2)
      a.fun(3) //underfined,0,0,0
     
      var b=fun(0).fun(1).fun(2).fun(3)// underfined,0,1,2
      var c=fun(0).fun(1)
      c.fun(2)
      c.fun(3)// underfined,1,1
    </script>
    </body>
    </html>
    

      

    闭包 下面五段代码分别输出什么?

    for( var i=0; i<5;i++){
        console.log(i)
    }
    //0,1,2,3,4
    for(var i=0;i<5;i++){
        setTimeout(function(){
            console.log(i)
        },1000*i);
    }
    // 15 5,5,5,5,5
    for(var i=0;i<5;i++){
        (function(i){
            setTimeout(funciton(){
                console.log(i)
            },i*1000);
        })(i);
    }
    
    for(var i=0;i<5;i++){
        (function(){
            setTimeout(function(){
                console.log(i);
            },i*1000);
        })(i);
    }
    //underfind  5,5,5,5,5
    for( var i=0; i<5; i++){
        setTimeout((function(i){
            console.log(i)
        })(i),i*1000)
    }
    //0 ,1,2,3,4,0
    

      

  • 相关阅读:
    shop--8.商品类别--辅助工具
    shop--8.商品类别--初始化展示
    数据库的三个基本范式
    DB2 常用命令
    用Java编程计算出所有的"水仙花数"
    用Java编程计算兔子生兔子的问题
    用Java编程计算猴子吃桃问题
    MySQL安装详解图文版(V5.5 For Windows)
    SQL 左外连接,右外连接,全连接,内连接
    mysql desc esc 基本命令总结
  • 原文地址:https://www.cnblogs.com/Lolita-web/p/10456795.html
Copyright © 2011-2022 走看看