jinleli
2016-05-24 20:21
function changeColor(){ var tbody=document.getElementById("table").lastChild; var tr=tbody.getElementsByTagName('tr'); var len=tr.length; for(var i=0;i<len;i++){ tr[i].onmouseover = function(){ alert(this); this.style.backgroundColor="#f2f2f2"; } tr[i].onmouseout = function(){this.style.backgroundColor="#fff"; } } }
在上面的代码中为什么不能写tr[i].style,有点理解不了了
我也有疑问,还有一点不懂,这段函数是要预编译么?为什么for()循环的i会是最后的len值,正常的for()循环是不是也是这样的?
我又翻了下书,然后我的理解是function(){
alert(this);
this.style.backgroundColor="#f2f2f2";
}是一个函数闭包,此时在这个函数里面调用i应该是最后的一个值即是len也就是3,而tr[i]就是tr[len],相当于个tr这个数组新增加了一项默认值为undefined.在这里function(){this.style.backgroundColor="#fff";
}是作为tr[i]这个对象的onmouseout属性的值,也就是给tr[i]这个对象添加了一个方法。当函数被作为某个对象的方法调用时,this等于那个对象。
因为那个地方是添加事件,那个事件函数并没有执行,点击执行的时候函数体就只有this这个变量,没定义tr[i];
JavaScript进阶篇
468060 学习 · 21891 问题
相似问题