zoukankan      html  css  js  c++  java
  • js闭包作用(避免使用全局变量)

    js闭包作用(避免使用全局变量)

    一、总结

    1、优点::可以把局部变量驻留在内存中,可以避免使用全局变量;

    2、缺点:也有占用更多内存的缺点,用完要及时让垃圾回收器回收  fn=null //应及时解除引用,否则会占用更多存

    3、闭包两种访问方式会有不同结果,()()双括号访问方式会出错,先赋值后的单括号访问方式是对的

    二、js闭包作用

    闭包 闭包的相关概念

      • 闭包的英文单词是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   // 通过全局变量来累加
    11      var num= 100;
    12 
    13      function add() {
    14 
    15        alert(++num);
    16 
    17      }
    18 
    19      add();
    20       add();
    21       add(); // 每执行函数一次,累加一次;
    22 
    23   // 通过局部变量无法实现累加
    24     function add(){
    25       var num= 100; // 这里改为局部变量;
    26       alert(num++); 
    27     };
    28 
    29     add();add();add();
    30   */
    31 
    32   // 通过闭包实现局部变量的累加
    33 
    34   function add(){
    35 
    36       var num= 100; // 这里改为局部变量;
    37 
    38        return function(){
    39         num++;
    40         alert(num);
    41        }
    42 
    43     };
    44     
    45    // add()();add()();add()();//这种调用方式会出错,因为每次调用 num都会初始化一次;三次得到的结果一样
    46 
    47    var fn=add()//只在这里初始化一次,后边调用的时候执行的是里边的匿名函数
    48 
    49    fn();fn();fn();
    50 
    51    fn=null //应及时解除引用,否则会占用更多存
    52   </script>
    53 </body>
    54 </html>
  • 相关阅读:
    db2中的常用命令及使用方法
    互联网服务应用协议设计
    Zookeeper整理(一)- 写操作产生事件,写操作与Watcher对应关系
    实现自己的连接池(一)
    SMP、NUMA、MPP体系结构介绍
    随手备忘 ubuntu12.04 lts 安装gcc 4.8
    认真体会 结构体中的零长度数组
    由内存池实现总结内存对齐问题
    认真理解 oom killer 备忘
    仔细体会 epoll中的et lt模式
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9026813.html
Copyright © 2011-2022 走看看