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>
原文地址:https://www.cnblogs.com/Renyi-Fan/p/9026813.html