zoukankan      html  css  js  c++  java
  • 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);
    		
    		//小结:关于闭包的用法,以后有空再整理出来
    

      

      

  • 相关阅读:
    HDU 2089 不要62
    HDU 5038 Grade(分级)
    FZU 2105 Digits Count(位数计算)
    FZU 2218 Simple String Problem(简单字符串问题)
    FZU 2221 RunningMan(跑男)
    FZU 2216 The Longest Straight(最长直道)
    FZU 2212 Super Mobile Charger(超级充电宝)
    FZU 2219 StarCraft(星际争霸)
    FZU 2213 Common Tangents(公切线)
    FZU 2215 Simple Polynomial Problem(简单多项式问题)
  • 原文地址:https://www.cnblogs.com/sun-rain/p/4824160.html
Copyright © 2011-2022 走看看