前端--- 闭包的理解总结

 

一  概念区分

     当看到function函数里面嵌套function函数 就是闭包。

 

 

二   应用场景

      1  先说正常的不同的function函数之间可以调用函数本身 例如

      function a(){  let name='sw'; console.log(name); }    function b(){ a(); }    2个函数是平级定义,但是无法访问函数内部的变量name

      2  闭包就是,当想访问函数内部的变量时或想把函数内部的变量抛到外面 ,就需要用闭包的写法(一些函数里面接收函数function参数并在内部执行)。

 

 

三   特别注意

       1   闭包虽然写法,是在主函数function内部定义闭包function函数,但是执行调用的时候还是在外面调用 (必须把闭包return 才能调用执行)。

            例如: function a(){ let name='sw';  return function b(){ return name; }  }     let result=a();     console.log(result.b());

                       ----拿到了函数内部的变量name结果 ' sw'.

       2   闭包由于执行调用都是在外面单独进行,所以类似平级定义的2个function a ,b  

            故闭包里面如果使用this. 访问变量都是调用的函数外部的变量, 函数里面的变量调用不需要通过this 来调用。

            或者把外层函数 let that=this 赋值,然后通过that 访问外层作用域私有变量。

        3  闭包引用变量后会把变量存储在内存中,直到使用完毕。所以注意及时清理,避免消耗内存。

        4   如果把父函数当做对象使用,把闭包当做公用方法,把内部变量当做私有属性,此时不要随便改变父函数内部变量的值/直接使用

 

 

 

四    具体说明

1 函数套函数主函数a , 里面的函数b是闭包 ,可以访问主函数中的变量 2 访问函数内部的变量 (虽然 闭包函数在主函数里面,但是闭包函数执行效果的时候 ,必须return出去 ,在外部执行 也就是说 在内部定义,但实际还是一个外部函数!!!)

3 一个函数想访问另外一个函数的内部变量,就是用闭包 。 但是闭包没有this对象, 可以用主函数的 var that= this ,闭包里面还可以调用主函数 a() 因为闭包就是一个外部函数 比如分开调用的时候 就是 a() , b() ,可以互相调用的! 4 闭包里面使用变量会在内存中,记得释放 否则影响性能

 

 

 

五    经典例子

 

 

 

 

     

posted @ 2021-02-20 17:40  JavAndroidJSql  阅读(339)  评论(0编辑  收藏  举报