[闭包、生存周期] javascript生存周期、闭包详解

生存周期—活多久—不再使用的东西,尽快回收

计算机资源 有限,当某个东西不再被使用,则应该自动释放该资源。即

自动垃圾回收(GC)。—当然不是真的自动,而是需要一定规则、标准


规则: 只要一个东西(数组、对象、、、)不再被人访问----则被标记为垃圾。等待垃圾车过来收走


生存周期:
  1. 全局变量 一直都存在,直到页面被关闭
  2. 局部变量 函数/块运行时存在,函数/块结束就可以回收。具体如下:
function show(){
	let a=[1,2,3];
}


//调用前---a不存在
show();   //调用中---a被创造出来
//调用后---a就是垃圾

闭包

局部变量–在函数中定义的变量,只能在当前函数中使用
当然,若是父函数、子函数的关系,则函数中可以使用父函数的局部变量----闭包
这就涉及到了生存周期问题

<body>  
	 <button id="btn1">按钮</button> 

	 <script>  
	 function show() {  

	    let a=12;  
		let oBtn=document.getElementById('btn1');  
	  
		 oBtn.onclick=function(){  
	          alert(a);  
		 }  
	  }  
	  
	  show(); 

 </script>  
</body>

对上面的代码进行分析,函数外调用了show(); 那么是不是show()后a这个变量就会被GC了呢?并不是!因为在show()的子级匿名函数中也用到了a,所以在onclick没有被调用,则a不会被GC。

闭包:子函数中可以使用父函数的局部变量;父函数的局部变量(本来应该在函数执行结束时就回收),因为子函数还会使用,所以延长了它的生存周期


这里有一个老式用法:—是为了替代块级作用域使用的,而现在已经有块级作用域了所以不再需要这种写法。

<script>
	(function(){
		alert('a');
	}) ();
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值