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

为什么这里的this不能写成as[i],这里的this到底是指什么

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

        

        as[i].onmouseover=function(){

            this.style.background="#ccc";

        }

        as[i].onmouseout=function(){

            

           this.style.background='none';

            }

        as[i].onclick=function(){

            title.innerHTML=this.innerHTML;

        }

        

    }


正在回答

代码语言

3 回答

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

        as[i].onmouseover=function(){

            this.style.background="#ccc";

        }

}

如果  this.style.background="#ccc"; 写成 as[i].style.background="#ccc";

最后as[0]~as[3]的元素的 onmouseover 函数会变成 

as[0].onmouseover=as[i].style.background="#ccc";

as[1].onmouseover=as[i].style.background="#ccc";

as[2].onmouseover=as[i].style.background="#ccc";

as[3].onmouseover=as[i].style.background="#ccc";

因为i经过for循环已经计算得出是4.

所以上式可以写成

as[0].onmouseover=as[4].style.background="#ccc";

as[1].onmouseover=as[4].style.background="#ccc";

as[2].onmouseover=as[4].style.background="#ccc";

as[3].onmouseover=as[4].style.background="#ccc";

显然是不正确的, 如果写成this

as[0].onmouseover=this.style.background="#ccc";

as[1].onmouseover=this.style.background="#ccc";

as[2].onmouseover=this.style.background="#ccc";

as[3].onmouseover=this.style.background="#ccc";

懂了吧~


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

盯叮町玎仃

还是不懂为什么第一遍遍历是i已经是4
2016-06-09 回复 有任何疑惑可以回复我~
#2

latency 回复 盯叮町玎仃

是执行顺序的关系,先循环为每个元素绑定事件,循环结束后才开始执行事件中的代码。这时,i的值已经越界,用as[i]取不到正确的值。
2016-08-05 回复 有任何疑惑可以回复我~

这段代码是为了改变滑过导航条时颜色发生变化,但是为什么不是指向as[i]而是window


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

这里的this指向的是window

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

举报

0/150
提交
取消

为什么这里的this不能写成as[i],这里的this到底是指什么

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