【转】JavaScript面向对象程序设计(7): 闭包
闭包这个概念看上去很深奥,这个词在离散数学里面的意思确实比较难于理解。在这里,我们先可以把闭包理解成是一种匿名函数或者匿名类。
1. 什么是闭包?
什么是闭包?一种正式的解释是:所谓闭包,指的是一种拥有很多变量并且绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是这个表达式的一部分。
相信很多人都不会理解这个定义,因为他的学术味道太浓了——或许你喜欢从字面的语法上进行分析:首先,它是一个表达式,这个表达式绑定了很多变量以及这些变量的环境。不过这并没有什么意义,这依然不会告诉我们什么是闭包。
那么,来看一个例子:
function Person() { var id; this.getId = function() { return id; } this.setId = function(newId) { id = newId; } } var p = new Person(); p.setId(1000); alert(p.getId()); // 1000 alert(p.id); // undefined ?