1. 程式人生 > >JS中閉包的優缺點

JS中閉包的優缺點

先上段程式碼:

//函式a
function a()
{
var i=0;
//函式b
function b()
{
alert(++i);
}
return b;
}
//函式c
var c = a();
c();

程式碼特點:
1、函式b巢狀在函式a內部;
2、函式a返回函式b。
程式碼中函式a的內部函式b,被函式a外面的一個變數c引用的時候,這就叫建立了一個閉包。有時候函式b也可以用一個匿名函式代替來返回,即return function(){};

優點:
1.保護函式內的變數安全,加強了封裝性
2.在記憶體中維持一個變數(用的太多就變成了缺點,佔記憶體)
閉包之所以會佔用資源是當函式a執行結束後, 變數i不會因為函式a的結束而銷燬, 因為b的執行需要依賴a中的變數。

不適合場景:
返回閉包的函式是個非常大的函式。

閉包的典型框架應該就是jquery了。
閉包是javascript語言的一大特點,主要應用閉包場合主要是為了:設計私有的方法和變數。
這在做框架的時候體現更明顯,有些方法和屬性只是運算邏輯過程中的使用的,不想讓外部修改這些屬性,因此就可以設計一個閉包來只提供方法獲取。
閉包的缺點就是常駐記憶體,會增大記憶體使用量,使用不當很容易造成記憶體洩露。

  1. 邏輯連續,當閉包作為另一個函式呼叫的引數時,避免你脫離當前邏輯而單獨編寫額外邏輯。
  2. 方便呼叫上下文的區域性變數。
  3. 加強封裝性,第2點的延伸,可以達到對變數的保護作用。

缺點:
閉包有一個非常嚴重的問題,那就是記憶體浪費問題,這個記憶體浪費不僅僅因為它常駐記憶體,更重要的是,對閉包的使用不當會造成無效記憶體的產生