我曾经以为我已经很好地理解了JavaScript,但显然并没有。让我用一个例子来解释我的问题。首先,我定义了以下模块:
var Test = function() {
var counter = 0;
function init() {
alert(counter);
}
return {
counter: counter,
init: init
}
};
我随后创建了2个实例:
var test1 = new Test();
var test2 = new Test();
现在我更新计数器变量(因为它是公共的),并进行一些警报。到目前为止一切都很好。
alert(test1.counter); // Alerts 0
test1.counter = 5;
alert(test2.counter); // Alerts 0
test2.counter = 10;
alert(test1.counter); // Alerts 5
现在我最后说:
test1.init(); // Alerts 0
test2.init(); // Alerts 0
我不理解的是为什么会弹出0?我以为第一个弹出的应该是5,第二个是10。
如果有人能够解释一下上述代码是如何工作的,或者指导我方向的话,我将不胜感激。谢谢!
return { counter: counter, ... }
只是复制了当前var counter
的值,并且更改this.counter
不会影响var counter
。 - Rango