关于this的实际问题

图片描述
图片描述

注释部分:为什么只能写this,不能写aTR[i]?

阅读 2.6k
2 个回答

onmouseover事件是由aTR[i] 这个对象触发的,所以当触发这个事件,调用函数时,this就是aTR[i].

为什么不能用aTR[i]呢?因为作用域的理解问题。这里的i实际上是个全局变量。你在for外面调用window.i你会发现值是aTR.length。所以当你触发onmouseover事件的时候那个aTR[i]等同于aTR[aTR.length]。
正确的方法是用this或者这样写

(function(item){
    item.onmouseover = function(){
        item.style ...... 
    }
})(aTR[i]);

但是显然第二种方法很别扭。

楼上说的正确,其实也可以(function(i){
aTR[i] .onmouseover = function(i){
aTR[i].style ......
}
})(i);

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