老师我总感觉不对,这个i用的地方太多了,循环函数参数哪里都有,帮忙解析一下吧,糊里糊涂的

老师我总感觉不对,这个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>


正在回答

登陆购买课程后可参与讨论,去登陆

4回答

同学你好,关于同学的问题,解答如下:

1、关于代码,测试同学的代码,是可以实现效果的。return numi这句代码是多余的,可以去除。

http://img1.sycdn.imooc.com//climg/5dd628b0094a7cb507800523.jpg

2、因为同学的代码还可以简化一下,也为了同学能够更好理解,所以其他小伙伴给出了另一种解决方案。如下:

http://img1.sycdn.imooc.com//climg/5dd629b00945ea7f07230274.jpg

老师给同学解释一下执行过程,

(1)函数嵌套函数,这是闭包的一个结构。在本代码中,外层立即执行函数嵌套里面的事件函数。

http://img1.sycdn.imooc.com//climg/5dd62a2b095da19b06660234.jpg

2.函数里的子函数被函数外部一直使用,使子函数无法释放,保持其所在作用域,形成一个封闭的作用域,称之位闭包。

本代码中,子函数(事件)给元素li绑定,所以子函数是被元素使用的(这就是被外部使用)无法释放(事件被保存下来了),变量i在事件中使用到了,所以它不能销毁,这样每一个事件都能拿到自己当前作用域下面的i值了。如下图

http://img1.sycdn.imooc.com//climg/5dd62e9a099daebb05230374.jpg

3、同学提问的所有问题,我们都会一一查看的,但是需要一定的时间,在这期间有很多热心的小伙伴会帮助同学解答问题,如果解答正确,可能不会再回复,如果解答错误,老师一定会回复正确的。

4、我们是鼓励同学之间互相解决问题的,因为这样可以提升同学解决问题的能力,因为在工作中,遇到问题,不可能完全靠同事帮你解决。

5、如果下拉条太细,可以使用滚轮,会更方便哟

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

提问者 RahodJoe 2019-11-21 11:38:09

强烈建议慕课网更新业务需求,评论发起者怎么会不能删除评论呢?还有网页看课程提问和问答模块右边的下拉条太细了,很难抓取,滚轮太久了,除非做了导航或者侧边栏导航

  • 提问者 RahodJoe #1
    打错字,应该是问题发起者怎么会不能删除评论呢?还有就是有一个人评论老师就不会再看这个问题,这个是真的有点扯淡
    2019-11-21 11:40:32
提问者 RahodJoe 2019-11-21 11:34:21

老师请回复我的问题,不需要同学来回答。

weixin_慕妹2333903 2019-11-21 10:27:11

<!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>


  • 提问者 RahodJoe #1
    你不是老师干嘛回答我的问题?
    2019-11-21 11:33:23
  • “weixin_慕妹2333903”同学你好,能够帮助其他小伙伴解答问题,你很棒,老师给你点赞
    2019-11-21 14:46:29
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师