【发布时间】:2009-06-03 21:25:23
【问题描述】:
我正试图围绕类、数据可见性和闭包(特别是在 Javascript 中)的概念展开思考,我在类型的 jQuery 文档页面上提到了闭包用于隐藏数据:
该模式允许您使用对外部不可见的数据进行操作的方法创建对象——这是面向对象编程的基础。
例子:
function create() {
var counter = 0;
return {
increment: function() {
counter++;
},
print: function() {
console.log(counter);
}
}
}
var c = create();
c.increment();
c.print(); // 1
通过使用关键字 var 声明变量 counter,它已经在函数/类定义中的局部范围内。据我所知,从一开始就无法从外部访问它。从数据可见性的角度来看,我是否遗漏了什么。
其次,写上面的类和下面的类有什么优势:
function create() {
var counter = 0;
this.increment = function() {
counter++;
}
this.print = function() {
console.log(counter);
}
return this;
}
var c = create();
c.increment();
c.print(); // 1
据我了解,这些在语义上或多或少是相同的——第一个只是更多的“jQuery 风格”。我只是想知道第一个例子中是否有我没有完全理解的优势或其他细微差别。如果我是正确的,这两个示例都创建了闭包,因为它们正在访问在自己的范围之外声明的数据。
【问题讨论】:
标签: javascript closures