js閉包理解與使用場景


要理解閉包首先要知道什么是函數的作用域鏈

因為有函數的作用域鏈存在,所以函數無論在哪里調用,函數都可以使用函數外部作用域的變量。

當一個函數被調用時,會創建一個執行環境及相應的作用域鏈。然后使用arguments和其他命名參數的值來初始化函數的活動對象。此活動對象在當前函數作用域鏈的第一位,外部函數的活動對象在作用域鏈的第二位,外部函數的外部函數的活動對象在第三位,直至作為作用域鏈終點的全局執行環境。

 

閉包的作用:

實現一個作用域,達到封裝的目的,這樣做的好處是隱藏私有變量,防止污染全局變量;

還可以實現緩存功能

 

 1        案例1:隱藏私有變量
 2 
 3         function pack() {
 4 
 5             var index;
 6 
 7             return function () {
 8 
 9                 return index++;
10 
11             };
12 
13         }
14 
15 
16 
17         var p = pack();
18 
19         p();
20 
21 
22 
23         案例2:緩存
24 
25         function createFab(n) {
26             var _cache = {};
27             return function (n) {
28                 var result = 0;
29                 if (_cache[n]) {
30                     return _cache[n];
31                 }
32                 if (n === 1 || n === 2) {
33                     result = 1;
34                 }
35                 else {
36                     result = fab(n - 1) + fab(n - 2);
37                 }
38                 _cache[n] = result;
39                 return result;
40             }
41         }
42 
43 
44         var fab = createFab();
45         console.info(fab(6));
46         console.info(fab(6));

 


免責聲明!

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



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