为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要用this.style不直接用tr[i].style呢?

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,有点理解不了了

正在回答

3 回答

我也有疑问,还有一点不懂,这段函数是要预编译么?为什么for()循环的i会是最后的len值,正常的for()循环是不是也是这样的?

0 回复 有任何疑惑可以回复我~

我又翻了下书,然后我的理解是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等于那个对象。


0 回复 有任何疑惑可以回复我~
#1

qq_夜舞天狼

我也有疑问,还有一点不懂,这段函数是要预编译么?为什么for()循环的i会是最后的len值,正常的for()循环是不是也是这样的?
2016-06-02 回复 有任何疑惑可以回复我~

因为那个地方是添加事件,那个事件函数并没有执行,点击执行的时候函数体就只有this这个变量,没定义tr[i];

0 回复 有任何疑惑可以回复我~
#1

jinleli 提问者

你可以看下我下面的回答,这是我看书后的理解
2016-05-25 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么要用this.style不直接用tr[i].style呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信