js閉包作用(避免使用全局變量)
一、總結
1、優點::可以把局部變量駐留在內存中,可以避免使用全局變量;
2、缺點:也有占用更多內存的缺點,用完要及時讓垃圾回收器回收 fn=null //應及時解除引用,否則會占用更多存
3、閉包兩種訪問方式會有不同結果,()()雙括號訪問方式會出錯,先賦值后的單括號訪問方式是對的
二、js閉包作用
閉包 閉包的相關概念
- 閉包的英文單詞是closure,是指有權訪問另一個函數作用域中變量的函數。
- 在本質上,閉包就是將函數內部和函數外部連接起來的一座橋梁。內層的函數可以使用外層函數的所有變量,即使外層函數已經執行完畢。
- 這是JavaScript中非常重要的一部分知識,因為使用閉包可以大大減少我們的代碼量,使我們的代碼看上去更加清晰等等,總之功能十分強大。
注:這些概念了解即可,接下來我們將通過實例來進行了解。
閉包的相關知識點
- 常見的方式是在函數內部創建另一個函數
- 閉包的第一個用途:通過閉包可以訪問局部變量
- 閉包的第二個用途:可以讓局部變量的值始終保持在內存中
- 優點:可以把局部變量駐留在內存中,可以避免使用全局變量;
全局變量在復雜程序中會造成許多麻煩(比如命名沖突,垃圾回收等),所以推薦使用私有的,封裝的局部變量。而閉包可以實現這一點。
- 缺點:由於閉包里作用域返回的局部變量資源不會被立刻銷毀回收,所以可能會占用更多的內存;所以過度使用閉包會導致性能下降;
- 優點:可以把局部變量駐留在內存中,可以避免使用全局變量;
- 循環函數中的匿名函數和閉包問題
三、代碼
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>