老师,我有疑惑
老师,这道题的代码,如何体现包闭特性,请详细分析下。 1,访问内部部变量 2,让变量的值保留在内存中。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>2-1</title>
<style>
li{
list-style: none;
float: left;
width: 100px;
margin-left: 30px;
background: #eee;
cursor: pointer;
text-align: center;
}
</style>
</head>
<body>
<ul>
<li>点我</li>
<li>敢点我?</li>
<li>真的敢点我?</li>
</ul>
<script>
var li=document.getElementsByTagName("li");
for(var i=0,len=li.length;i<len;i++){
(function(a){
li[a].onclick=function(){
console.log(a)
}
})(i)
}
</script>
</body>
</html>
正在回答
1、如果把立即执行函数去掉,for循环给每一个li循环绑定了点击事件,当for循环执行完之后,i的值为3了。点击li元素的时候,需要使用i的值,会先从当前作用域中找,点击事件中并没有保存i值,所以会继续向上找,找到的就是for循环中的i值,也就是for循环执行完毕之后的i值,结果就是3 。
2、这道题没有使用到从外部访问内部变量,只是利用了一个特性:点击事件执行的时候,获取立即执行函数中保存的变量i值。
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星