美文网首页
2021-03-15 js 函数的闭包 outer

2021-03-15 js 函数的闭包 outer

作者: 半眼鱼 | 来源:发表于2021-03-15 22:31 被阅读0次

    有一个简单可行的办法,就是让outer自己return掉inner:

    1 function outer(){

    2 var a = 333;

    3 function inner(){

    4 console.log(a);

    5 }

    6 return inner; //outer返回了inner的引用

    7 }

    8

    9 var inn = outer(); //inn就是inner函数了

    10 inn(); //执行inn,全局作用域下没有a的定义

    11 //但是函数闭包,能够把定义函数的时候的作用域一起记忆住

    12 //能够输出333

    这就说明了,inner函数能够持久保存自己定义时的所处环境,并且即使自己在其他的环境被调用的时候,依然可以访问自己定义时所处环境的值。

    一个函数可以把它自己内部的语句,和自己声明时所处的作用域一起封装成了一个密闭环境,我们称为“闭包” (Closures)。

    每个函数都是闭包,每个函数天生都能够记忆自己定义时所处的作用域环境。但是,我们必须将这个函数,挪到别的作用域,才能更好的观察闭包。这样才能实验它有没有把作用域给“记住”。

    我们发现,把一个函数从它定义的那个作用域,挪走,运行。嘿,这个函数居然能够记忆住定义时的那个作用域。不管函数走到哪里,定义时的作用域就带到了哪里。这就是闭包。

    闭包在工作中是一个用来防止产生隐患的事情,而不是加以利用的性质。

    因为我们总喜欢在函数定义的环境中运行函数。从来不会把函数往外挪。那为啥学习闭包,防止一些隐患,面试绝对考。

    闭包的性质
    每次重新引用函数的时候,闭包是全新的。

    1  function outer(){
    
    2  var count = 0;
    
    3  function inner(){
    
    4  count++;
    
    5  console.log(count);
    
    6  }
    
    7  return inner;
    
    8  }
    
    9 
    
    10  var inn1 = outer();
    
    11  var inn2 = outer();
    
    12 
    
    13  inn1(); //1
    
    14  inn1(); //2
    
    15  inn1(); //3
    
    16  inn1(); //4
    
    17  inn2(); //1
    
    18  inn2(); //2
    
    19  inn1(); //5
    

    闭包案例:点击显示li标签

    image.png

    相关文章

      网友评论

          本文标题:2021-03-15 js 函数的闭包 outer

          本文链接:https://www.haomeiwen.com/subject/rmwlcltx.html