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
    

      

  • 相关阅读:
    Python开源框架、库、软件和资源大集合
    java常用的框架介绍
    2016年7款最佳 Java 框架
    10款免费开源PHP框架
    10个提升MySQL性能的小技巧
    15个最受欢迎的Python开源框架
    Facebook's React vs AngularJS: A Closer Look
    用c#监控网络状态
    15种主要编程语言介绍及应用场合
    物联网常见通信协议梳理
  • 原文地址:https://www.cnblogs.com/Lolita-web/p/10456795.html
Copyright © 2011-2022 走看看