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

来源:9-22 编程练习

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

写回答 关注

3回答

  • qq_夜舞天狼
    2016-06-02 11:42:54

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

  • jinleli
    2016-05-25 12:35:45

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


    qq_夜舞天...

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

    2016-06-02 11:44:09

    共 1 条回复 >

  • 名分开就是姓名
    2016-05-24 21:50:52

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

    jinlel...

    你可以看下我下面的回答,这是我看书后的理解

    2016-05-25 12:36:45

    共 1 条回复 >

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468060 学习 · 21891 问题

查看课程

相似问题