码迷,mamicode.com
首页 > Web开发 > 详细

js闭包初体验

时间:2015-09-20 20:23:34      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

 
/*
			闭包的定义:一个内部函数里变量作用域生命周期延续,直接访问一个函数里面的私有属性
			闭包的作用:解决变量作用域延续的问题,同时解决全局变量冲突的问题
		*/
		
		//1、定义内部函数,私有函数
		function sum(){ //函数是一种数据类型
			var a = 100;
			//内部函数
			function get(){
				return a;
			}
			return get;
		}
		
		var count = sum();  //返回的是一种function的数据类型
		
		/*
			2.闭包的第二种形态:回调函数,属性和方法的外调,
			插件开发中常用,比如经典的jQuery,大公司需要开发的插件等等
		*/
		
		function tzEvent(id,event,callback){
			var title = "我是一个窗口哦!";
			document.getElementById(id)["on"+event] = function(){
				console.log(this.innerHTML);
				if(callback) callback(title);
			};
		}
		
		tzEvent("btn","click",function(title){
			console.log(title);
		});
		
		//3.function是一种数据类型,在调用()的时候编译和运行函数体的内容
		function test(){
			var arr = [];
			for(var i=0;i<3;i++){  
			/*
				小小作用域,会把function赋值给arr,
				但是i值不会return,因为没有被调用
				而且i的值最后的结果会被牵引约束
			*/
				arr[i] = function(){
					return i;
				}
			}
			return arr;
		}
		
		var arr1 = test();
		console.log(arr1[0]()+"---"+arr1[1]()+"---"+arr1[2]());
		//结果是  3---3---3 具体运行过程可以再谷歌浏览器控制台debug
		
		/*4.闭包最好的表现形式,是一个及时函数
			解决一个全局变量互相牵引或者约束的行为
			
			定义变量,难免会重名,在开发中除非
			万不得已的情况是不允许使用全局变量的,
			即使使用也需要定义特殊的名字,防止全局污染
		*/
		(function(b){
			var a = 100;
			console.log(a+"==="+b)
		})(200);
		
		//小结:关于闭包的用法,以后有空再整理出来

  

  

js闭包初体验

标签:

原文地址:http://www.cnblogs.com/sun-rain/p/4824160.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!