如下程序,请问为什么这里的console.log(i)是5?

<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<ul>
<li>11111</li>
<li>22222</li>
<li>33333</li>
<li>44444</li>
<li>55555</li>
</ul>

</body>
<script type="text/javascript">

var ul1 = document.getElementsByTagName('ul')[0];
var lis = ul1.children;
for(var i=0 ; i<lis.length ; i++){ 
lis[i].onclick = function(){ 
console.log(i)
// lis[i].parentNode.removeChild(lis[i]);
// this.parentNode.removeChild(this);
}
}

</script>
</html>

紫衣仙女
浏览 213回答 2
2回答

叮当猫咪

onclick 里不应该直接使用 i ,这是一个变量当你 for 结束时,i 的值已经是 5 了,所以所有的 onclick 的 i =5如果要操作文档对象,尽量使用 ID、Class 等有固定特征的方式操作父级、上、下关联对象,艹使用 this 会方便一些,在操作对象时,this 在此时代表对象本身。

qq_花开花谢_0

你好,原因很简单,因为js没有块作用域的概念,循环var的i,直到循环结束还在整个作用域之内,而当click事件触发的时候,循环早就结束了,i的值只能是最大值,所以总是得到5。下面是能实现你功能的正确方法之一:<html><head>&nbsp;&nbsp;&nbsp;&nbsp;<meta&nbsp;charset='utf-8'>&nbsp;&nbsp;&nbsp;&nbsp;<style>&nbsp;&nbsp;&nbsp;&nbsp;</style>&nbsp;&nbsp;&nbsp;&nbsp;<script>&nbsp;&nbsp;&nbsp;&nbsp;window.onload=function(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;oButton&nbsp;=&nbsp;document.getElementsByTagName("button");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i=0;i<oButton.length;i++){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oButton[i].onclick=(function(idx){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;function(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(idx&nbsp;+&nbsp;1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oButton[num].style.background="#ccc";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num=idx;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.style.background="#ff0000";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})(i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;</script></head><body>&nbsp;&nbsp;&nbsp;&nbsp;<button&nbsp;>点击1</button>&nbsp;&nbsp;&nbsp;&nbsp;<button&nbsp;>点击2</button>&nbsp;&nbsp;&nbsp;&nbsp;<button&nbsp;>点击3</button>&nbsp;&nbsp;&nbsp;&nbsp;<button&nbsp;>点击4</button>&nbsp;&nbsp;&nbsp;&nbsp;<button&nbsp;>点击5</button></body></html>
打开App,查看更多内容
随时随地看视频慕课网APP