手记

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

<!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>
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);
}


查看全部评论