老师我总感觉不对,这个i用的地方太多了,循环函数参数哪里都有,帮忙解析一下吧,糊里糊涂的
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>2-9编程题</title> <style> /*补充代码*/ li { cursor: pointer; } </style> </head> <body> <!-- 补充代码 --> <ul> <li>0</li> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> </ul> <script> var li=document.getElementsByTagName("li"); for(var i=0,len=li.length;i<len;i++){ (function(i){ // 补充代码 function numi(){ alert(i); } li[i].onclick = numi; return numi; })(i) } </script> </body> </html>
正在回答
同学你好,关于同学的问题,解答如下:
1、关于代码,测试同学的代码,是可以实现效果的。return numi这句代码是多余的,可以去除。
2、因为同学的代码还可以简化一下,也为了同学能够更好理解,所以其他小伙伴给出了另一种解决方案。如下:
老师给同学解释一下执行过程,
(1)函数嵌套函数,这是闭包的一个结构。在本代码中,外层立即执行函数嵌套里面的事件函数。
2.函数里的子函数被函数外部一直使用,使子函数无法释放,保持其所在作用域,形成一个封闭的作用域,称之位闭包。
本代码中,子函数(事件)给元素li绑定,所以子函数是被元素使用的(这就是被外部使用)无法释放(事件被保存下来了),变量i在事件中使用到了,所以它不能销毁,这样每一个事件都能拿到自己当前作用域下面的i值了。如下图
3、同学提问的所有问题,我们都会一一查看的,但是需要一定的时间,在这期间有很多热心的小伙伴会帮助同学解答问题,如果解答正确,可能不会再回复,如果解答错误,老师一定会回复正确的。
4、我们是鼓励同学之间互相解决问题的,因为这样可以提升同学解决问题的能力,因为在工作中,遇到问题,不可能完全靠同事帮你解决。
5、如果下拉条太细,可以使用滚轮,会更方便哟
如果我的回答帮到了你,欢迎采纳,祝学习愉快~
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>2-1</title>
<style>
/*补充代码*/
</style>
</head>
<body>
<!-- 补充代码 -->
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<script>
var li=document.getElementsByTagName("li");
for(var i=0,len=li.length;i<len;i++){(
function(id){
// 补充代码
li[id].onclick=function(){
alert(id);
}
})(i)
}
</script>
</body>
</html>
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星