• js闭包初体验


     
    /*
    			闭包的定义:一个内部函数里变量作用域生命周期延续,直接访问一个函数里面的私有属性
    			闭包的作用:解决变量作用域延续的问题,同时解决全局变量冲突的问题
    		*/
    		
    		//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);
    		
    		//小结:关于闭包的用法,以后有空再整理出来
    

      

      

  • 相关阅读:
    用表组织数据
    SQL Server 2008创建数据库
    c#字符串常用方法
    属性升级介绍
    c#语法
    初识C#
    CSS动画
    YCSB性能测试工具使用
    高性能的Redis代理TwemProxy
    JVM垃圾回收总结
  • 原文地址:https://www.cnblogs.com/sun-rain/p/4824160.html
Copyright © 2020-2023  润新知