闭包 vs 对象

2018-10-21  本文已影响13人  真海

闭包是什么

示例:

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();

因此闭包与对象属于一个事物的正反面,可以使用闭包实现的都可以使用对象实现。

上一篇 下一篇

猜你喜欢

热点阅读