好奇怪的函数调用问题,求解答,谢谢

来源:9-22 编程练习

phenix770

2016-03-02 10:37

下面两种实现选中变色的方式,为什么只有第一种有效果,而第二种方法没有任何效果,求解答

window.onload = function(){
                  
     // 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。
            var trs = document.getElementsByTagName("tr");
            for(var i=1;i<trs.length;i++)
            {
                changeColor(trs[i]);
            }
       }
            
		function changeColor(obj){
    	    obj.onmouseover = function(){
                obj.style.backgroundColor=" #f2f2f2";
            }
            obj.onmouseout = function(){
                obj.style.backgroundColor=" #fff";
            }
		}
window.onload = function(){
          var trs=document.getElementsByTagName("tr");
          for(var i= 0;i<trs.length;i++)
          {
              trs[i].onmouseover=function(){
              trs[i].style.backgroundColor="#f2f2f2";
              }
              trs[i].onmouseout=function(){
              trs[i]style.backgroundColor="#fff";
              }
          }
        }


写回答 关注

5回答

  • 丨丨丨丨丨
    2016-03-02 18:11:20
    已采纳

    第一种方法是在根据标签名循环的时候为每一个tr绑定了一个changeColor方法,参数就是下标,第二种单纯的循环无法绑定相应的方法,无法使用正确的参数去执行下边的代码,所以会报错导致不起作用。

    长颈鹿在附近

    为什么第二种就无法绑定相应的方法,不是有trs[i]吗

    2016-03-05 20:08:11

    共 2 条回复 >

  • 慕粉3561241
    2016-03-27 22:51:19

    方法一中,obj是形参,在整个方法内都有效,它的值通过7行的实参trs[i]传递了。

    实参trs[i]是第i个tr节点的引用,通过这个引用当然可以修改它的值。

    方法二中,5行和6行的trs[i]的区别,

    5行的trs[i],代表的是第 i 个tr节点,

    6行的trs[i],首先他不是1-12行这个匿名方法的形参、局部变量,

    而是属于5-7行定义的匿名方法的一个没有声明定义的东西。。

    就是什么都不是的意思。就不用说用它来修改什么属性了。。。

    可以通过将6行的trs[i]改为this,this表示当前调用5-7行这个匿名方法的对象,即是6行的trs[i]。

    8、9行和5、6行同理

    是这样吗?不是请告诉我哦,打字辛苦。


    慕粉3561...

    即是5行的 trs[i]...打错了.

    2016-03-27 22:53:07

    共 1 条回复 >

  • WS01234
    2016-03-07 22:20:01

    你的第二种方法的for循环的i的初始条件是0,而trs[0]是空白节点,所以会出错;

    但是你的第一张方法的i的初始条件是1,所以没有出错

  • phenix770
    2016-03-04 10:49:52

    能不能再说具体点,还是不太理解

  • qq_树叶丶_0
    2016-03-02 14:23:41

    看看 一起学习

JavaScript进阶篇

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

468060 学习 · 21891 问题

查看课程

相似问题