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

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

    如下代码中, 把 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>


正在回答

4 回答

 这里面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的函数里,就会只显示序号对应的图像

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

慕圣9424722 提问者

谢谢,是不是写在某个函数外面的赋值不能对这个函数起作用?
2017-08-27 回复 有任何疑惑可以回复我~
#2

慕运维3393194 回复 慕圣9424722 提问者

抱歉,我好像说错了,onload函数被执行后,for循环依次将3个onmouseover函数处在可触发状态,在for循环结束后,i的值便被解放,所以当自己触发onmouseover函数时,i的值已经不存在了,但是onload函数里声明的p、li还是存在的。。。(我也是初学者,瞎猜的,仅供参考)。
2017-08-28 回复 有任何疑惑可以回复我~
#3

慕运维3393194 回复 慕运维3393194

for循环依次将三个<li>与onmouseover函数连起来,当其中一个<li>触发时,便会执行该函数。(仅供参考)
2017-08-28 回复 有任何疑惑可以回复我~

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

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

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

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

慕圣9424722 提问者

那你棒棒,两个for循环用i没问题的
2017-08-26 回复 有任何疑惑可以回复我~
#2

Adrian_lee 回复 慕圣9424722 提问者

O.O刚刚试了,好像可以,我以前用jquery不行O.O
2017-08-26 回复 有任何疑惑可以回复我~

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

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

举报

0/150
提交
取消

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

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