var makeCounter = function() {
var privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment: function() {
changeBy(1);
},
decrement: function() {
changeBy(-1);
},
value: function() {
return privateCounter;
}
}
};
var Counter1 = makeCounter();
var Counter2 = makeCounter();
console.log(Counter1.value()); /* logs 0 */
Counter1.increment();
Counter1.increment();
console.log(Counter1.value()); /* logs 2 */
console.log(Counter2.value()); /* logs 0 */问题的背景:我是初学小白,接触了作用域,作用域链,原型,继承,还有一点点闭包的知识。这段计时器代码是我在看这个链接中 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures 学习闭包知识遇见的。我觉得上面的代码类似于《JS高阶程序设计》中用工厂模式创建对象的方法。不知道这么理解对不对。
最重要的疑惑就是,var Counter1 = makeCounter(); 在执行以后,makeCounter() 是一个函数,执行完以后会返回函数,那么 Counter1 里面存储的是指向返回这个函数的指针。同理,Counter2 里面也是返回的这个函数的指针。也就是,Counter1 和 Counter2 保存的是同一个函数的指针。那么,为什么通过 Counter1 改变了这个函数的 value 值,Counter2 的 value 值不会受到影响呢?
谢谢各位前辈解答~
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4479/viewspace-3132816/ ,如需转载,请注明出处,否则将追究法律责任。