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

随时随地看视频
热门评论
-
慕侠72528002017-11-19 0
-
小杨同学爱前端2017-11-01 0
-
可以说很强了2017-11-01 0
查看全部评论把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); }