请问一下这两种实现方式的区别在哪呢?
来源:16-8 作用域和闭包--闭包
404NO
2018-07-31
var counter = (function() {
var privateCounter = 0;
function changeBy(val) {
privateCounter += val;
}
return {
increment () {
changeBy(1);
},
decrement () {
changeBy(-1);
},
value () {
return privateCounter;
}
};
})();
console.log(counter.value()); // 0
counter.increment();
counter.increment();
console.log(counter.value()); // 2
counter.decrement();
console.log(counter.value()); // 1var counter = {
privateCounter: 0,
increment () {
this.privateCounter ++
},
decrement () {
this.privateCounter --
},
value () {
return this.privateCounter
}
}
console.log(counter.value()) // 0
counter.increment()
counter.increment()
console.log(counter.value()) // 2
counter.decrement()
console.log(counter.value()) // 1写回答
1回答
-
第一种是用的闭包来管理数据,原始数据被封装起来,使用者只能使用你提供的 API 来修改数据。第二种你将原始数据都裸露出来了,使用者可直接通过 couter.privateCounter = 10000 这样来修改。
可以了解一下面向对象三要素之一 —— 封装 。
112018-07-31
相似问题