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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM