window.onload = function(){
var tr=document.getElementsByTagName("tr");
for(i=0;i<tr.length;i++){
tr[i].onmouseenter=function(){tr[i].style.background="#f2f2f2";}
tr[i].onmouseleave=function(){tr[i].style.background="#fff";}
}
}
楼上完全正确,可以用以下方案解决:
方案一:用let声明变量i,即for(i=0;i<tr.length;i++)改为for(let i=0;i<tr.length;i++)
方案二:用自执行匿名函数把闭包包装起来,
只需将for循环体里面的内容改为:
(function(num){ tr[num].onmouseenter=function(){tr[num].style.background="#f2f2f2";} tr[num].onmouseleave=function(){tr[num].style.background="#fff";} })(i)
因为你给每个tr都绑定了tr[i]的样式发生变化,它们的i是同一个变量。当你把鼠标以上tr时,这时候数组循环是肯定已经完成了的。这时候的i其实就是tr.length.