<!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
局部变量