我对代码进行的注释分析和解决方法对吗

我对代码进行的注释分析和解决方法对吗

    // 注释分析

    function click(i){

    //2  这里写i。若i = 2;循环里的i被覆盖,写这里i会直接固定成2,并且局部变量的i也会变成2,找到i后直接return,终止外部for循环,且按钮索引值固定,只有一个点击事件生效

         btns[i].onclick = function () {  //这里function(写i) 会直接让i固定为0,0由第一次for循环i的赋值

          //1 这里写i。循环里的i被覆盖,直接按下一次循环;

    alert(i + 1); 

    };

    }

    for (var i = 0; i < 3; i++) {

       //3 这里写i。若i = 2;循环里的i被覆盖,写这里i会直接固定成2,并且局部变量的i也会变成2,找到i后直接return,终止外部for循环,且按钮索引值固定,只有一个点击事件生效

               click(i);  

    }


    // 解决方案

    // 方法一

    btns[0].onclick = function () {

    alert(0 + 1);

    };

    btns[1].onclick = function () {

    alert(1 + 1);

    };

    btns[2].onclick = function () {

    alert(2 + 1);

    };


    // 方法二

    function click(i){

    btns[i].onclick = function(){

    alert(i+1);

    }

    }

    for (var i = 0; i < btns.length; i++) {

    click(i);

    }


正在回答

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

1回答

同学你好,老师没怎么看懂同学注释内容是什么意思,而且,同学添加注释的代码和提供的解决方法二的代码是一样的实现思路,只不过是将for循环的条件由固定值3改成了按钮的长度而已。实现的效果是一样的。

如下所示写法的思路,主要是从作用域的角度分析, 即: 每循环一次就调用一次click函数, 在函数的作用域中会保存当前的i值, 所以每次点击的时候, 向上查找作用域就是找到click函数中保存的不同的i值。并不是同学注释中的说的什么覆盖。

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

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

  • 慕尼黑7895541 提问者 #1
    其实for函数里click方法如果不设置参数,是不是等于题目给出注释那段代码
    2020-05-29 15:16:42
  • 好帮手慕慕子 回复 提问者 慕尼黑7895541 #2
    同学你好,理解是对的,祝学习愉快~
    2020-05-29 16:22:23
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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