JavaScript 清除閉包

antzone發表於2017-04-03

閉包在JavaScript中是一個很重要的概念,本文不做介紹。

具體可以參閱JavaScript 閉包一章節。 

閉包雖然是一個利器,但是也有弊端,本文同樣不做介紹,下面直接進入正題。

例如"變數只初始化一次"這樣的需求,在常規的語言中可以使用如下方式:

[C#] 純文字檢視 複製程式碼
class Class{
 function init(){
   this.n = 0;
 }
 function func(){
   this.n ++;
   return this.n;
  }
}
var obj = new Class();

js通常則需要使用閉包來解決此問題:

[JavaScript] 純文字檢視 複製程式碼
var obj = {
 func : (function(){
  var n = 0;
  return function(){
   n ++;
   return n;
  }
 })()
}

但更建議採用這種方法(消除閉包):

[JavaScript] 純文字檢視 複製程式碼
function Class(){
 var self = this;
 self.n = 0;
 self.func = function(){
  self.n ++;
  return self.n;
 }
}
var obj = new Class();

因為後者的可擴充套件性更好. 當需要實現對一個變數的不同操作時, 後一種可以只需要再定義一個不同的函式(也就是簡單線性擴充套件), 而前一種(閉包)則需要完全重寫。

相關文章