• js闭包(函数内部嵌套一个匿名函数:这个匿名函数可将所在函数的局部变量常驻内存)


    js闭包(函数内部嵌套一个匿名函数:这个匿名函数可将所在函数的局部变量常驻内存)

    一、总结

    1、闭包:就是在一个函数内部嵌套一个匿名函数,这个匿名函数可以访问这个函数的变量。

    二、要点

    闭包 闭包的相关概念

      • 闭包的英文单词是closure,是指有权访问另一个函数作用域中变量的函数。
      • 在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕。
      • 这是JavaScript中非常重要的一部分知识,因为使用闭包可以大大减少我们的代码量,使我们的代码看上去更加清晰等等,总之功能十分强大。

    注:这些概念了解即可,接下来我们将通过实例来进行了解。

    闭包的相关知识点

    1. 常见的方式是在函数内部创建另一个函数
    2. 闭包的第一个用途:通过闭包可以访问局部变量
    3. 闭包的第二个用途:可以让局部变量的值始终保持在内存中
      • 优点:可以把局部变量驻留在内存中,可以避免使用全局变量;

        全局变量在复杂程序中会造成许多麻烦(比如命名冲突,垃圾回收等),所以推荐使用私有的,封装的局部变量。而闭包可以实现这一点。

      • 缺点:由于闭包里作用域返回的局部变量资源不会被立刻销毁回收,所以可能会占用更多的内存;所以过度使用闭包会导致性能下降;
    4. 循环函数中的匿名函数和闭包问题

    三、代码

     1 <!DOCTYPE html>
     2 <html lang="zh-cn">
     3 <head>
     4   <meta charset="utf-8">
     5   <title>课堂演示</title>
     6 </head>
     7 <body>
     8   <script>
     9   /*
    10     function myfn(){
    11 
    12       return function (){
    13 
    14         return('**********')
    15 
    16       }
    17     }
    18 
    19     //alert(myfn)  //输出整个函数表达式
    20     //alert(myfn())  //输出匿名函数表达式
    21 
    22      //调用方式1
    23     alert(myfn()()) 
    24 
    25       //调用方式2
    26       var bb=myfn()
    27       alert(bb())
    28  
    29   //通过闭包访问局部变量
    30 
    31   function myfn(){
    32       var bb='局部变量bb'
    33   }
    34    alert(bb) // 局部变量函数外无法访问
    35  */
    36   function myfn(){
    37 
    38       var bb='局部变量bb'
    39 
    40       return function (){
    41 
    42         return(bb) // 通过匿名函数返回myfn()的局部变量bb;
    43 
    44       }
    45   }
    46 
    47   //调用方式1
    48     //alert(myfn()())
    49   //调用方式2
    50       var csbb=myfn()
    51       alert(csbb())
    52   </script>
    53 </body>
    54 </html>
  • 相关阅读:
    iframe中的页面如何触发父页面事件
    js获取gridview的值
    不出现重复数字,带干扰的验证码
    文本框内不允许输入字母
    后台调用前台JS方法
    在后台得到前台元素,给元素改变属性值或添加属性
    C#常见面试题
    Flex代码生成器 (FCG)
    c#(WinForm)遍历局域网计算机(电脑)获取IP和计算机名称
    VisualSVN Server + Tortoise SVN 使用教程(补充版)
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9017668.html
Copyright © 2020-2023  润新知