闭包

	<script>
//			var x = 0 ; 
//			function a(){
//				x++;
//			}
//			a();//没有结果 x++
//			a();//没有结果 x++
//			console.log(x);//2

//			function a(){
//				var x = 0; 
//				x++;
//				alert(x);
//			}
//			a();//1
//			a();//1
//			console.log(x);//x未定义 报错 不能获取内部变量
			
//			js的拉结回收机制
//			什么事js的垃圾回收机制
//		在内存中存储的数据会被销毁
//		js里的遍历存储数据是占用内存的 那么当函数执行过后 并且不再执行的情况下

//		var  flag = true;
//		function a(){
//			if(flag)
//			{
//				var x = 0;
//				flag = false;
//			}
//			alert(x);
//		}
//		a();//0
//		a();//undefined 

//		function a(){
//			var x= 0;
//			return function(){
//				x++;
//				alert(x);
//			}
//		}
//		a();//什么都不执行
//		a()();
//		alert(a);//x未定义 不能获取函数内部的变量

//		function aaa(){
//			var a = 1;
//			return function(){
//				a++;
//				alert(a);
//			}
//		}
//		console.log(aaa());
//		console.log(aaa());

//		function aaa(){
//			var a=1;
//			return function(){
//				a++;
//				alert(a);
//			}
//		}
//		
//		aaa()();
//		alert(a);	//报错 a没有定义

//		function aaa(){
//			var a = 1;
//			return function(){
//				a++;
//				alert(a);
//			}
//		}
//		var b =aaa();
//		b();
//		b();
//		alert(a);//报错
		
		
//		js垃圾处理机制 函数内部的变量在函数执行完成后就会被销毁
//		var flag = true;
//		function a(){
//			if(flag)
//			{
//				var a= 0;
//				flag = false;
//			}
//			a++;
//			alert(a);
//		}
//		a();
//		a();//NaN

		/*	
		 * 总结: 什么闭包到底是什么?
		 * 1.其实闭包就是函数内部包着函数这种形式就是闭包
		 * 2.并且由于函数内部的空间是封闭的所以函数内部的变量不会对函数的变量不会对函数外部的变量产生污染
		 * 3.访问外部函数作用域中变量的函数
		 * 4.被内部函数访问的外部函数的变量可以保存在外部函数作用域内而不被收回 --这是核心,
		 */

  

原文地址:https://www.cnblogs.com/mingjixiaohui/p/5247148.html