javascript--闭包




<script type="text/javascript">
	function t1(){
			var age = 30;
			function t2(){
				alert(age);
			}
			return t2();

	}

	// var tmp = t1();
	/*在其他语言里 函数局部变量在调用完后 就销毁了
	但js里 t2用了age变量 依然能访问
	形成了封闭的环境 一句话 函数的作用域在声明时生成的,不是调用时
	就是那个变量还存在包括它的值   
	*/	
var  age = 99;
// tmp();// 20




/*
var xx = 'winddow';
var obj={xx:123,yy:456,t:function(){alert(this.xx)}};
//obj.t();//123

var dog={xx:'lm dog'};

var tmp=dog.t;
tmp();//window
//tmp母体是window


(dog.t=obj.t)()
       |
   这是一个表达式 返回的是一个值 不是通过引用调用  
而是立即使用 就像之前jQuery的那个
null又被解释成window·


前一个本来就是window·母体
后一个 是null 只是结果一样
*/





/*闭包计数器
多人开发时需要一个全局计数器 

解决方法:设立一个全局变量 但污染了全部变量

闭包解决如下 是一个别人污染不到的变量*/
/*function counter(){
	var cnt = 0;
	var cntf = function(){
		return ++cnt;
	}
	return cntf;
}
// 这里 把函数 赋给了变量 要使用这个函数 变量()要这样,,,
var startcnt = counter();
alert(startcnt());
alert(startcnt());
alert(startcnt());
*/


// 把上面简化一下‘
var cnt = (function(){var cnt = 0; 
			return function(){return ++cnt;}})();

alert(cnt());


/*
这依然是全局变量 所以为了避免全局污染 有两种方法
1 统一放在一个全局对象上 如 jQuery 的$ 
2 每人用自己的命名空间 */	
/*
$ = {};
$ .cnt= ....

var sonia = {};
sonia.cnt=  ....*/ 
</script>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值