问答详情
源自:9-22 编程练习

第九章练习题

第九章练习

第九章练习题感觉好难自己一点思路都没有,看了大神写的代码有好几个地方不太懂求大神帮忙解释。

window.onload = function(){

                   

     // 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。

          var tr=document.getElementsByTagName("tr");

          for(var i= 0;i<tr.length;i++)

          {

              bgcChange(tr[i]);

          }

     }

      function bgcChange(obj)

     {

        obj.onmouseover=function(){

            obj.style.backgroundColor="#f2f2f2";

        }

        obj.onmouseout=function(){

            obj.style.backgroundColor="#fff";

        }

     }

这是大神写的一段代码。这里的obj是不是形参?如果是该如何理解obj与tr【i】的关系?为什么把obj改成t【i】后就不行了?还有代码里面是先调用bgcchange()函数,然后在定义函数,这样为什么也可以?

提问者:新人沈琦斌 2016-04-25 23:15

个回答

  • 玩具车队长
    2016-04-26 11:48:39
    已采纳

    前面一个for循环就是遍历,执行已经封装好了的bgcChange()这个函数,obj就是形参,换成什么代码多行(除了已经定义的变量,比如tr[i]),这里面的tr[i]就是实参。你要想把obj换成tr[i],就要把封装的函数内容放在循环里面,就像这样:

              var tr=document.getElementsByTagName("tr");

              for(var i= 0;i<tr.length;i++)

              {

                      tr[i].onmouseover=function(){

                tr[i].style.backgroundColor="#f2f2f2";

            }

            ty[i].onmouseout=function(){

                tr[i].style.backgroundColor="#fff";

            }

           }

    不知道我说明白了没有、

  • 新人沈琦斌
    2016-05-03 18:16:06

    谢谢你的讲解。你这个关于this的用法我看了有7、8个讲解,可是还是不是很清楚。

  • _野人_
    2016-05-03 11:44:36

    要想把obj换成tr[i]应该是这样的,不知道前面那个答案你去测试过没有~

    window.onload = function(){
              var tr=document.getElementsByTagName("tr");
              for(var i= 0;i<tr.length;i++)
              {
                  tr[i].onmouseover=function color1(){this.style.backgroundColor="#f2f2f2";}

                    tr[i].onmouseout=function color2(){this.style.backgroundColor="#fff";}
            }

  • Uauslman
    2016-04-26 13:32:07

    前面几个问题解答的挺全面了,我就给你解释最后一个:“还有代码里面是先调用bgcchange()函数,然后在定义函数,这样为什么也可以?”程序线程执行时一步一步来的并不是从上往下的顺序,当程序执行到函数bgchange()时,就会开始函数的解析(去执行函数体)完事以后又回来继续往下执行。希望你能看懂