闭包(2)

闭包的现象:当内部的函数被保存在外部时,将会生成闭包。闭包会导致原有的作用域链不释放,造成内存泄漏(占用的多了,剩下的就少了)。

闭包的作用:

     1.实现公用变量eg:函数累加器

function add(){
			var count = 0;
			function demo(){
				count ++;
				console.log(count);
			}
			return demo;
		}
		var counter = add();
		counter();
		counter();
		counter();
		counter();

2.可以做缓存(存储结构)eg:eater

function test(){
			var num = 100;
			function a(){
				num ++;
				console.log(num);
			}
			function b(){
				num --;
				console.log(num);
			}
			return [a,b];//数组第一位放的是函数a,第二位放的是函数b
		}
		var myArr = test();
		myArr[0]();//a
		myArr[1]();//101    100

形成闭包吗?a和test形成的闭包与b和test形成的闭包公用的是不是一个test的AO?如果公用的是一个他的AO的话,那他改,他一定也跟着改,是吧。test里放再多,他们连的线都是test的劳动成果。test相当于一个父亲,a大儿子,b是小儿子,

他俩拿的钱不是一个爹的吗?必须是一个啊。所以a被保存出来之后,他身上有一个被定义的状态是:test的AO连着GO对吧。B被保存出来之后是test的AO连着GO

,他俩test的AO连着GO是一个人,完全一样的。a和test形成一个闭包,b也和test形成一个闭包,但是a在用test的时候是在100的基础上去改的数,改完之后,b在a改完的基础上再用。

     3.可以实现封装,属性私有化eg:person();

     4.模块化开发,防止污染全局变量

猜你喜欢

转载自blog.csdn.net/hdq1745/article/details/81172972
今日推荐