请问一下这两种实现方式的区别在哪呢?

来源: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()); // 1
var 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回答

双越

2018-07-31

第一种是用的闭包来管理数据,原始数据被封装起来,使用者只能使用你提供的 API 来修改数据。第二种你将原始数据都裸露出来了,使用者可直接通过 couter.privateCounter = 10000 这样来修改。

可以了解一下面向对象三要素之一 —— 封装 。

1
1
404NO
非常感谢!
2018-07-31
共1条回复

BAT大牛带你横扫初级前端JavaScript面试(第二版)

BAT高级前端工程师亲授,结合真实面试题,提高面试成功几率

4268 学习 · 817 问题

查看课程