• js中的“闭包”


    js中的“闭包”

    姓名:闭包

    官方概念:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

    ( ⊙o⊙ )!!!这个也太尼玛官方了撒,作为菜鸟的我根本无法理解它想表达个什么意思!但是作为一只好奇的菜鸟又很想知道“闭包”到底是个什么东西!所以最终找到了传说中的“度娘”帮忙!还算有了一点小小的理解!

    个人见解:在函数体内定义另外的方法函数,而这个方法函数被函数以外的变量引用,这时就形成了闭包!

    可能这样的理解也太抽象了,并不是那么简单易懂!实例吧:

    复制代码
     1 <script type="text/javascript">
     2 
     3 function A(){
     4     var S=0;
     5     function B(){
     6         alert(++S);
     7     }
     8     return B;
     9 }
    10 var C=A();
    11 C();
    12 </script>
    复制代码

    上面这一段代码就创建了一个闭包,因为当函数执行到var C=A();时,表面上看C指向的是A函数,而实际上C所指向的函数是B函数,所以再执行到C()的时候就会输出2;这样的话B函数就被A函数以外的变量引用了,根据个人见解,创建了一个闭包!

    当我在小小的了解了什么时候闭包后也顺便看了哈闭包的用途,据说闭包的用途主要有两点:

    1、可以读取函数内部的变量

    2、让这些变量始终保持在内存中

    复制代码
     1 <script type="text/javascript">
     2  
     3 function A(){
     4  var S=1;
     5  D=function(){
     6         S+=1;
     7     }
     8  function B(){
     9   alert(S);
    10  }
    11     return B;
    12 }
    13 var C=A();
    14 C(); // 输出1
    15 D();
    16 C(); // 输出2
    17    
    18  </script>
    复制代码

    上面的代码中C指向的还是是B函数,C执行了两次,第一次输出1,第二次输出2,这证明了S一直被保存在内存中,并没有在A函数在被调用后自动清除,这是为什么呢,原因是因为B函数被赋给了一个全局变量,这导致了B函数一直在内存中,而B函数的执行又需要依赖着A函数,所以A也一直在内存中,不会在调用结束后被回收!(这样的理解貌似有点不专业)!

    表达完毕,请广大群众多多指教!

     
     
    分类: javascript
  • 相关阅读:
    SHA1 VS RSA: what's the difference between them?
    TLS Security
    TLS Handshake Protocol
    Building Cython code
    Getting started with JupyterLab
    Installing Cython
    【转贴】libcrypto.so.10丢失导致sshd无法运行解决方案
    [Typescript] Function Overloads
    [Typescript] Function Generics
    [Typescript] Discriminated (Tagged) Unions
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3276488.html
Copyright © 2020-2023  润新知