js閉包理解與使用場景

要理解閉包首先要知道什麼是函數的做用域鏈緩存

由於有函數的做用域鏈存在,因此函數不管在哪裏調用,函數均可以使用函數外部做用域的變量。閉包

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

 

閉包的做用:spa

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

還能夠實現緩存功能對象

 

 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));
相關文章
相關標籤/搜索