问答详情
源自:10-1 编程挑战

为什么赋值写在函数里就不起作用了?

    如下代码中, 把 li[i].index=i写在onmouseover的函数里(不是for循环中),代码就没有效果了,这是为什么呢?

<script type="text/javascript">

      window.onload=function(){

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

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

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

      li[i].index=i;

      li[i].onmouseover=function(){

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

      li[i].className="";

      p[i].className="hide";

      }

      this.className="active";

      p[this.index].className="show";      

      }

      }

    }

    </script>


提问者:慕圣9424722 2017-08-25 19:53

个回答

  • 慕运维3393194
    2017-08-27 21:30:35
    已采纳

     这里面li[i].onmouseover=function()相当于

    <li onmouseover="a"> <!--第i+1个li-->

    function a(){}

    把 li[i].index=i;写到里面,其实并没有i的值,所以下面li[i]都是用this,代表li[i]该对象,可以这样尝试一下,分别把

    this.index=0   this.index=1   this.index=2,放到onmouseover的函数里,就会只显示序号对应的图像

  • 山_3
    2017-08-28 13:58:07

    可能是作用域的关系    li[i].index=i写在函数里 作用范围就只在函数内部  外部无法调用

  • Adrian_lee
    2017-08-26 13:59:46

    别的问题不知道,首先你的for循环都是循环i就不对

  • 慕慕6136893
    2017-08-26 13:40:25

    这应该是函数的执行环境的问题,如果写在onmouseover的函数里,当函数执行完,执行环境被销毁,li[i].index=i也会被销毁,所以就没有了,应该是,我也不是特别清楚。