不懂,为什么这样写提示全为3?

不懂,为什么这样写提示全为3?

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

<title>变量、作用域</title>

    

</head>

<body>

<button>1</button>

<button>2</button>

<button>3</button>

    <script type="text/javascript">

//     var btns = document.getElementsByTagName('button');

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

//              btns[i].onclick = function () {

//     alert(i + 1);

//     };

//    }

//在此处修改代码


    var btns = document.getElementsByTagName('button');

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

             var count = i;

            btns[count].onclick = function () {

    alert(count + 1);

    };

   }

    </script>

</body>

</html>


正在回答 回答被采纳积分+1

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

1回答
好帮手慕夭夭 2019-11-04 17:41:24

你好同学,因为页面打开的时候,for循环就立马执行了 ,此时循环3次,依次为按钮绑定事件。而count第一次循环值为0 ,第二次循环又重新定义并赋值为1 .....最终赋值的也是2。代码中var count = i;没有什么意义,因为它们都是全局变量。当点击按钮的时候,for循环早就执行结束了,拿到的count永远是2(加1为3)。

本题应该如下实现:

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

定义一个函数,把事件写在函数中,在循环中调用。函数会形成一个局部作用域,循环3次,函数调用3次。即形成了3个独立的作用域,那么调用函数时,会把当前的i值传递给参数count,所以每一个函数中,通过参数count保存下来当前的i值,这样拿到的值就不一样了哦。

祝学习愉快,望采纳。

  • 提问者 可好 #1
    所以for(条件里属局部变量){循环里的变量属全局变量}?
    2019-11-04 17:54:59
  • 好帮手慕夭夭 回复 提问者 可好 #2
    理解的不对,在你的代码中,for循环中的变量也是全局变量。在JavaScript中,只有在函数中使用var定义的变量,才叫做局部变量。(另外,函数中的参数也相当于一个局部变量)。
    2019-11-04 18:54:32
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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