继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

js的作用域,这题有点不理解

lamp_lutao
关注TA
已关注
手记 1
粉丝 4
获赞 4
<!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);
            };
       }
//在此处修改代码
    </script>
</body>
</html>
打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP

热门评论

把for循环的var改为let。作用域的问题

click事件,点击事件是异步的,无论你点击有多快for循环都已经执行了,而且有变量提升,作用域,再去了解一下立即执行函数和闭包,这道题就简单了

当你可以点击按钮的时候,是已经循环完了的,这时候i就等于3了,所以可以这样

for (var i = 0; i < 3; i++) { btns[i].onclick = function () { alert(i + 1); };
改为:
for (var i = 0; i < 3; i++) { btns[i].onclick = (function(i){
    return funciton(){alert(i + 1)};   
    })(i);
}


查看全部评论