閉包 vs 對象

閉包是什麼

示例:

function counter() {

   var n = 0;

   return function() {

        return n++;

   }

}

var c1 = counter();

c1();

上面示例中counter執行時返回一個函數對象,該函數對象訪問了局部變量n,構成了一個執行的封閉體。

閉包由兩個要素構成:函數對象以及作用域鏈(封閉的變量空間)

之前進行流行一句話是程序是由算法與數據構成的,閉包中的算法爲函數對象,數據爲作用域鏈(可訪問的變量,外部局部變量等);而對象中算法爲方法,數據爲成員變量。即閉包是函數對象爲主題,封裝了變量環境;而面向對象爲數據爲主題,封裝了方法。都達到了算法加數據的結構。

上例使用對象實現爲:

var counter = {

    n: 0;

    next: function() {

         return n++;

    }

}

counter.next();

因此閉包與對象屬於一個事物的正反面,可以使用閉包實現的都可以使用對象實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章