zoukankan      html  css  js  c++  java
  • js闭包

    <!DOCTYPE HTML>  
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <title>闭包初次接触</title>
    		<script type="text/javascript">
    		var n=999;
    		function f(){
    			alert(n);
    		}
    		f();
    		function f2(){
    		  var	m=999; //一定要使用var命令。如果不用的话,你实际上声明了一个全局变量! 
    		}
    		//m is not defined
    		//alert(m);  //此处:外部是获取不到函数内部的局部变量的
    		function f22(){
    			k=777; //没有用var,则是全局变量
    		}
    		f22();
    		alert(k);
    		//那么怎么获取到函数内部的局部变量呢?----闭包
    		//闭包:定义在一个函数内部的函数,就是能够读取其他函数内部变量的函数。 
    		function f3(){
    			var p=888;
    			function f4(){
    				alert(p);
    			}
    			return f4;//
    		}
    		var result=f3();
    		result();
    		//闭包可以用在许多地方。它的最大用处有两个,
    		//一个是前面提到的可以读取函数内部的变量
    		//另一个就是让这些变量的值始终保持在内存中。 
    		
    		</script>
        </head>
        <body>
    	
    	</body>
    </html>
    
    <!DOCTYPE HTML>  
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <title>匿名函数和闭包</title>
    		<script type="text/javascript">
    		//另一个就是让这些变量的值始终保持在内存中。 
    	      function f(){
    			var n=999;
    			nAdd=function(){n+=1;}//匿名函数,本身就是个闭包,没有var,是个全局变量
    			function f2(){
    				alert(n);
    			}
    			return f2;
    		  }
    		  var result=f(); //返回局部变量n的值
    		  result();
    		  nAdd();  //n+1后返回1000,说明n一直在内存中
    		  result();
    		
    		</script>
        </head>
        <body>
    	
    	</body>
    </html>
    
    <!DOCTYPE HTML>  
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <title>闭包使用</title>
    		<script type="text/javascript">
    		var name="The Window";
    		var object={
    			name:"My Object",
    			getNameFunc:function(){
    				return function(){
    					return this.name;				}
    			}
    		}
    		alert(object.name);
    		alert(object.getNameFunc()());
    		</script>
        </head>
        <body>
    	
    	</body>
    </html>
    
    <!DOCTYPE HTML>  
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <title>闭包使用</title>
    		<script type="text/javascript">
    		function outerFun(){
    			var a=0;
    			function innerFun(){
    				a++;
    				alert(a);
    			}
    			return innerFun;
    		}
    		var obj=outerFun();
    		obj();
    		obj();
    		var obj2=outerFun();
    		obj2();
    		obj2();
    		</script>
        </head>
        <body>
    	
    	</body>
    </html>
    
    <!DOCTYPE HTML>  
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <title>闭包使用</title>
    		<script type="text/javascript">
    		function outerFun(){
    			var a=0;
    			alert(a);
    		}
    		var a=4;
    		outerFun();
    		alert(a);//结果是 0,4 .  因为在函数内部使用了var关键字 维护a的作用域在outFun()内部. 
    		
    		function outerFun2(){
    			a=0;//没有var
    			alert(a);
    		}
    		var a=4;
    		outerFun2();
    		alert(a);//结果为 0,0 真是奇怪,为什么呢?
    		//作用域链是描述一种路径的术语,沿着该路径可以确定变量的值 .
    		//当执行a=0时,因为没有使用var关键字,
    		//因此赋值操作会沿着作用域链到var a=4;  并改变其值. 
    		</script>
        </head>
        <body>
    	
    	</body>
    </html>
    
  • 相关阅读:
    Web前端开发资源集锦
    刮刮卡效果
    html5游戏驴子跳
    Bootstrap3实现的响应式幻灯滑动效果个人作品集/博客网站模板
    40款免费社交图标素材
    移动端的推拉效果导航菜单-支持响应式及其多层菜单
    通过HTML5 Visibility API检测页面活动状态
    HTML5游戏开发引擎Pixi.js新手入门讲解
    滚动触发的翻转式文字引用效果
    11个实用的CSS学习工具
  • 原文地址:https://www.cnblogs.com/25miao/p/6416409.html
Copyright © 2011-2022 走看看