JavaScript中消除閉包的一般方法介紹

來源:互聯網
上載者:User

JavaScript中消除閉包的一般方法介紹

 這篇文章主要介紹了JavaScript中消除閉包的一般方法介紹,本文直接給出了操作樣本,需要的朋友可以參考下

 

 

JavaScript 的閉包是一個其主動發展的特性, 也是一個被動發展的特性. 也就是說, 一方面, JS 有了閉包能更好解決一些問題. 另一方面, JS 為瞭解決某些問題, 而不得不使用閉包勉強來解決問題.

前者這裡不討論, 如果 JS 閉包能更好的解決問題, 當然使用閉包更好.

我討論的是後者, 是因為 JS 本身的限制, 而不得不磕磕絆絆地用閉包來解決的問題, 例如"變數只初始化一次"這樣的需求.

常規的語言這樣解決:

代碼如下:


class Class{
function init(){
this.n = 0;
}
function func(){
this.n ++;
return this.n;
}
}
var obj = new Class();

 

JavaScript 一般會這樣解決(使用閉包):

 

代碼如下:


var obj = {
func : (function(){
var n = 0;
return function(){
n ++;
return n;
}
})()
}

 

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

 

代碼如下:


function Class(){
var self = this;
self.n = 0;
self.func = function(){
self.n ++;
return self.n;
}
}
var obj = new Class();

 

因為後者的可擴充性更好. 當你需要實現對一個變數的不同操作時, 後一種可以只需要再定義一個不同的函數(也就是簡單線性擴充), 而前一種(閉包)則需要完全重寫(這就是為什麼你經常聽到重構這個詞的原因).

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.