闭包的理解

<!DOCTYPE html>
<html>
<head>
	<title>bibao</title>

</head>
<body>

	<input type="button" name="btn01" value="01" />
	<input type="button" name="btn02" value="02" />
	<input type="button" name="btn01" value="03" />

	<script type="text/javascript">
		window.onload = function(){
		var oBtns = document.getElementsByTagName('input');
			for(var i =0; i<oBtns.length;i++){
				(function(i){
						oBtns[i].onclick = function(){
							alert(i);
						}		
				})(i);
			
			}				
		}
		// @1
		// 闭包的理解,就是原来,函数内的局部变量 ,一般都是执行完毕就释放掉了
		// 因为一个函数,在调用之前会把所有的形参都进行压栈处理,当函数执行完毕后
		// 就把所有的形参(局部变量) 都释放掉!
		// @2 ,在我们的案列中,内部的函数,持有外部函数的局部变量的指针,所以
		// 由于oBtn[i] 的事件处理函数不释放,则 内部函数也不会释放空间,则 外部的函数的局部变量也不会
		// 释放
			

	</script>
</body>
</html>

 

好,我们再次画图理解下我上面这句话

说白了,就是垃圾GC 回收机制呗!

感觉和Java差不多, 就是 有引用指向那个外部函数内的局部变量,所以那个局部变量不释放,所以上面就有三个i 

局部变量

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值