请看下这段代码中函数的问题

var trs = document.getElementsByTagName('tr');
for(var i = 0;i < trs.length;i++){       
        trs[i].onmouseover = function(){
            this.style.backgroundColor = 'grey';
        }
        trs[i].onmouseout = function(){
            this.style.backgroundColor = 'white';
        }       
}

请问函数中的this为什么不能换成trs[i]

阅读 2.8k
5 个回答

如果函数中的this换成trs[i],对应的绑定事件触发时,i已经变成trs.length了,这样就不是对应的元素了。

闭包问题呀..

因为换成i,最终都是执行trs[trs.length]这个东西啦,闭包问题;
直接this多好

i会停留在最终值trs.length上
于是变成了hover只改变trs[trs.length]的样式
当然,这个元素是没有的,index溢出

楼上讲的对,就是for循环执行完了,i变成了trs.length。此时你再去触发函数,显然就不是你想要的当前元素背景变色了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题