关于js数组元素与this调用他们的style的区别

图片说明
为什么这里的20行this可以 而23行tr[i]不行。 求大神解答下原因然后我好去仔细读一下高程的相关部分

这个涉及到闭包,你直接引用i,最后得到的是tr.length,并不是当时便利到的i值,导致越界了,需要做个闭包

 tr[i].onmouseout=(function(i){
return function(){
   tr[i].style.color='yellow';//这里和参数i形成闭包,引用到当时的i值
}
})(i)

///

楼上说的没有错,这个问题是入门常遇到的问题。闭包的话,可以解决这个问题,this 是指向当前对象,也可以解决这个问题。
这个为什么不可以呢,发个链接你看一下吧,论坛之前发的常见问题小结,这个解释的很清楚了
http://bbs.csdn.net/topics/392043312

这个时候的i值已经循环增长到tr.length减一了,所以你取到的tr[i]已经不是你想要的那个元素了,具体为什么我不是很清楚,但是如果你不用this的话还有一个办法可以解决这个问题。就是在
tr[i].index = i;
for(var i=0;i<len;i++) {
tr[i].onmouseover = function(_){
tr[this.index].style.color="#ccc";
}
}