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

  

原文地址:https://www.cnblogs.com/Lolita-web/p/10456795.html