请老师检查一下
来源:2-9 编程练习
上心4409406
2019-10-12 10:02:19
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>2-1</title>
<style>
li{
cursor:pointer;
}
</style>
</head>
<body>
<ul>
<li>000</li>
<li>111</li>
<li>222</li>
<li>333</li>
<li>444</li>
<li>555</li>
</ul>
<script>
var li=document.getElementsByTagName("li");
for(var i=0,len=li.length;i<len;i++){
(function(i){
li[i].onclick = function(){
alert(i);
}
})(i)
}
</script>
</body>
</html>
以前做过这种练习 给每个按钮循环绑定事件 但是我没搞懂这个和闭包的关系
1回答
好帮手慕星星
2019-10-12
同学你好,
代码实现效果正确,很棒哦!
可以参考下面的解释:
(1)函数嵌套函数,这是闭包的一个结构。在本代码中,外层立即执行函数嵌套里面的事件函数。
(2)函数里的子函数被函数外部一直使用,使子函数无法释放,保持其所在作用域,形成一个封闭的作用域,称之为闭包。
本代码中,子函数给元素li绑定,所以子函数是被元素使用的(这就是被外部使用)无法释放(事件被保存下来了),变量i在事件中使用到了,所以它不能销毁,这样每一个事件都能拿到自己当前作用域下面的i值了。如下图:

可以再理解下,祝学习愉快!
相似问题