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

来源:5-1 编程挑战

chenjiaobin

2016-04-19 22:20

 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回答

  • lqzh
    2016-04-22 16:16:31

     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";

    懂了吧~


    latenc... 回复盯叮町玎仃

    是执行顺序的关系,先循环为每个元素绑定事件,循环结束后才开始执行事件中的代码。这时,i的值已经越界,用as[i]取不到正确的值。

    2016-08-05 17:12:47

    共 2 条回复 >

  • chenjiaobin
    2016-04-21 22:41:13

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


  • qq_一季樱花树下的帷幕_0
    2016-04-20 14:50:55

    这里的this指向的是window

DOM事件探秘

DOM事件?本课程会通过实例来给小伙伴们讲解如何使用这些事件

99545 学习 · 1197 问题

查看课程

相似问题