JavaScript 闭包

垃圾回收机制
  1. 全局变量只有标签页关闭才会回收
  2. 局部变量用完就回收

标准浏览器使用的是标记回收,旧的IE使用的是引用回收,如果两个变量相互引用,这两个变量就一直不会被回收

闭包
 var a = 10;
   document.onclick = function(){
   console.log( ++a );
 }
/*a是全局变量,所以函数里的a可以一直加*/
//闭包
(function(){
  var a = 10;
  document.onclick = function(){
  	console.log( ++a );//使用的是外部函数的a
  }
})();
//产生了闭包,此时a为局部变量,但不会被回收

/*
		闭包产生的条件:
      1. 外部函数 嵌套 内部函数
      2. 内部函数使用了外部函数的参数或变量
      称这个内部函数为闭包
      
    闭包产生的影响:
    	被引用的 参数/变量 不会被回收
*/
闭包使用的情况
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>

无法得到序号

var aP = document.getElementsByTagName("P");
for( var i=0;i<aP.length;i++){
  	aP[i].onclick = function(){
  			console.log(i);//无法得到序号,无论点哪个得到的都是循环结束后的值--4
  	}
}

使用闭包

var aP = document.getElementsByTagName("P");
for( var i=0;i<aP.length;i++){//a
  (function(i){//c
    aP[i].onclick = function(){//d
      console.log(i);//e
    };
  })(i);//b
}
//ab处的i是同一个i   cde处的i是同一个i


//ES6使用let,作用与闭包相同
var aP = document.getElementsByTagName("P");
for( let i=0;i<aP.length;i++){
  	aP[i].onclick = function(){
  			console.log(i);
  	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值