• 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
    

      

  • 相关阅读:
    spring揭秘 读书笔记 六 bean的一生
    分枝限界算法
    libLAS1.8.0 编译和配置(VS2013+Win7 64)(一)
    Unity学习笔记 之 发射小球碰撞物体的代码记录
    hdu1281 棋盘游戏 --- 最大匹配
    javascript设计模式
    3、Android中Activity的跳转
    2.11 确定运行计划
    php扩展之 pdo_mysql.so
    POJ 1061 青蛙的约会(扩展欧几里得)
  • 原文地址:https://www.cnblogs.com/Lolita-web/p/10456795.html
Copyright © 2020-2023  润新知