慕瓜6239116
2017-07-24 00:43
function Highlight(){
var tbody = document.getElementById('table').lastChild;
trs = tbody.getElementsByTagName('tr');
for(var i =1;i<trs.length;i++){
trs[i].onmouseover = function(){
this.style.backgroundColor ="#f2f2f2";
}
trs[i].onmouseout = function(){
this.style.backgroundColor ="#fff";
}
}
}
上面的this,能用trs[i]代替么
不可以,trs[i]不在匿名函数的作用域内,除非将trs[i]以参数传到函数内部,你可以试下,如下代码trs[i]的结果是undefined
HTML部分
<table> <tr> <td>TD11</td> <td>TD12</td> </tr> <tr> <td>TD21</td> <td>TD22</td> </tr> </table>
JS部分
window.onload=function(){ var tbody = document.getElementsByTagName('tbody')[0]; trs = tbody.getElementsByTagName('tr'); for(var i =0;i<trs.length;i++){ trs[i].onmouseover = function(){ console.log(trs[i]); // trs[i].style.backgroundColor ="#f2f2f2"; } trs[i].onmouseout = function(){ // trs[i].style.backgroundColor ="#fff"; } } }
不可以,trs[i]作用域不在函数内部,可以想象下此函数本应该在外边写的,而现在是没有给起名字,作为匿名函数使用,也就是说for循环只有此函数的引用,而函数体本身是没有在for内的
——大概是这样,这个我也有些模糊
JavaScript进阶篇
468060 学习 · 21891 问题
相似问题