我正在学习模块模式,对它们的行为有点困惑。
所以,我有这个简单的模块,
var testModule = (function() {
//private counter
var counter = 0;
return {
//public methods
incrementCounter: function () {
console.log(counter++);
},
resetCounter: function () {
counter = 0;
}
};
}());
从我理解到现在(如果我错了请纠正我),将立即调用上述函数(因为括号)。
运行时,它返回一个对象,该对象仅包含定义的公共方法。
所以,最后,在执行上述功能后,我们的代码看起来像内部 (如果我错了,请纠正我。这只是我对它的理解行为)
testModule_ = {
incrementCounter: function () {
return counter++;
},
resetCounter: function () {
console.log("counter value prior to reset: " + counter);
counter = 0;
}
};
我不理解的是,当我们访问公共方法时
testModule.incrementCounter()
或testModule.resetCounter()
,他们如何获得counter
的价值,因为testModule
现在没有counter
?
我可以看到它第一次获得值,因为当匿名函数被自我调用时,它确实递增counter
并重置值。但是第二次呢,它从counter
的价值到哪里?
我希望我很清楚。提前谢谢。