闭包是什么
示例:
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();
因此闭包与对象属于一个事物的正反面,可以使用闭包实现的都可以使用对象实现。
网友评论